闭包_定时器_BOM

2017-02-07  本文已影响0人  饥人谷_全

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

使用立即执行函数生成闭包

//方法1
var fnArr = [];
for (var i = 0; i < 10; i ++) {
  fnArr[i] =  (function(n){

    return function(){
      console.log(n);
    };
  }(i));
}
console.log( fnArr[3]() );  

//方法2
var fnArr = [];
for (var i = 0; i < 10; i ++) {
  (function(n){

    return fnArr[i] =  function(){
      return n;
    }}(i));
 
}
console.log( fnArr[3]() );  

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

var Car = (function(){
   var speed = 0;
   function setSpeed(s){
       speed = s
   }
   function getSpeed(){
     console.log(speed);
   }
   function accelerate(){
     speed+=10;
   }
   function decelerate(){
     speed-=10;
   }
   function getStatus(){
     if(speed>0)
       console.log('running');
     if(speed==0)
       console.log('stop');
     if(speed<0)
       console.log('error');
     
   }
   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(); 
Car.decelerate();
Car.getStatus();  //'stop';
//Car.speed;  //error

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

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

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

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

如何获取元素的真实宽高

兼容IE 获取当元素计算后的样式,再根据属性即可获取各种样式。
element.currentStyle ?element.currentStyle : window.getComputedStyle(element, null)

URL 如何编码解码?

为什么要编码

因为一些历史的原因URL设计者使用US-ASCII字符集表示URL。(原因比如ASCII比较简单;所有的系统都支持ASCII)
为了满足URL的特性,设计者就将转义序列移植了进去,来实现通过ASCII字符集的有限子集对任意字符或数据进行编码。
URL转义表示法包含一个百分号,后面跟上两个表示字符ASCII码的十六进制数值。

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

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

猜你喜欢

热点阅读