闭包

2017-01-28  本文已影响0人  谢梦扬_

下面的代码输出多少?修改代码让fnArri 输出 i。使用两种以上的方法

var fnArr = [];
for (var i = 0; i < 10; i ++) {
    fnArr[i] =  function(){
        return i;
    };
}
console.log( fnArr[3]() ); //10

第一种 立即执行函数
 var fnArr = [];
for (var i = 0; i < 10; i ++) {
    (function (n) {
        fnArr[i] = function () {
            return n;
        };
    })(i)
}
console.log( fnArr[3]());
 第二种 闭包
  var fnArr = [];
  for (var i = 0; i < 10; i ++) {
        fnArr[i] = function () {
            var n = i;
            return function(){
                return n
            };
        }()
    }

封装一个汽车对象,可以通过如下方式获取汽车状态

  var Car = (function(){
    var speed = 0;
    function setSpeed(s){
        speed = s
    }
    function getSpeed(){
        return speed;
    }
    function accelerate(){
         speed +=10;
    }
    function decelerate(){
        speed -=10;
    }
    function getStatus(){
        return speed>0? 'running':'stop';
    }
    return {
        setSpeed: setSpeed,
        getSpeed: getSpeed,
        accelerate:accelerate,
        decelerate:decelerate,
        getStatus:getStatus
    }
})();
Car.setSpeed(30);
Car.getSpeed(); //30
Car.accelerate();
Car.getSpeed(); //40;
Car.decelerate();
Car.decelerate();
Car.getSpeed(); //20
Car.getStatus(); // 'running';
Car.decelerate();

下面这段代码输出结果是? 为什么?

var a = 1;
setTimeout(function(){
    a = 2;
    console.log(a); //2  setTimeout 最后执行
}, 0);
var a ;
console.log(a);//1
a = 3;
console.log(a);//3

下面这段代码输出结果是? 为什么?

var flag = true;
setTimeout(function(){
    flag = false;
},0)                         //最后执行
while(flag){}           //flag = true 所以无限循环,后面不会执行
console.log(flag);

下面这段代码输出?如何输出delayer: 0, delayer:1...(使用闭包来实现)

  for(var i=0;i<5;i++){
        setTimeout(function(){
            var n = i;
            return function() {
                console.log('delayer:' + n);
            }
        }(),0);
        console.log(i);            

如何获取元素的真实宽高)?

  currentStyle //兼容IE
  function getStyle(obj,attr){return obj.currentStyle?obj.currentStyle[attr]:
             getComputedStyle(obj,null)[attr]}

 var height = getStyle(elemt,'height')
 var width = getStyle(elemt,'width')

URL 如何编码解码?为什么要编码?

let myURL = 'https://www.google.com/#q=javascript';
//如果我们想编码一个URL并且可以使用它(访问),使用encodeURI();
let simpleURL = encodeURI(myURL); //"https://www.google.com/#q=javascript"
//如果我们想编码一个URL并且可以将其放置在某URL的参数中,使用encodeURIComponent();
let completeURL = encodeURIComponent(myURL);
let newURL = 'https://www.google.com/?back=' + completeURL; //"https://www.google.com/?    
back=https%3A%2F%2Fwww.google.com%2F%23q%3Djavascript"
window.open(simpleURL); //将会打开一个窗口,地址为https://www.google.com/#q=javascript

题目8: 补全如下函数,判断用户的浏览器类型

 function isAndroid(){
    return  /Android/.test(navigator.userAgent);
 }
  funcnction isIphone(){
        return /iPhone/.test(navigator.userAgent);
 }
function isIpad(){
    return /iPad/.test(navigator.userAgent);
 }
function isIOS(){
    return /(iPad)|(iPhone)/i.test(navigator.userAgent);
 }
上一篇下一篇

猜你喜欢

热点阅读