美文网首页
未完待续

未完待续

作者: 汤初景 | 来源:发表于2017-11-01 17:02 被阅读0次

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

var fnArr = [];
    for (var i = 0; i < 10; i ++) {
        fnArr[i] =  function(){
            return i;
        };
    }
    console.log( fnArr[3]() ); 
方法一:
    var fnArr = [];
    for (var i = 0; i < 10; i ++) {
        fnArr[i] =  (function(i){ //IIFE & 闭包
            return function(){
                return i;
            }
        })(i);
    }
    console.log( fnArr[3]() );
方法二:
var fnArr = [];
    for (var i = 0; i < 10; i ++) {
     !function (i){    
        fnArr[i] =  function(){
            return i;
        };
      }(i)
    }
  console.log( fnArr[5]() );


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

var Car = (function(){
   var speed = 0;
   function setSpeed(ss){
       speed = ss
   }
function getSpeed(){
    return speed
}
function accelerate(){
    speed+=10
}
function decelerate(){
    speed-=10
}
function getStatus(){
    if (speed>0) {
        return "正跑呢";
    }else{
        return "停下了"
    }
}
   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(); // '正跑呢';
Car.decelerate(); 
Car.decelerate();
Car.getStatus();  //'停下了';



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

var a = 1;
setTimeout(function(){
    a = 2;
    console.log(a);    //2             代码1
}, 0);
var a ;
console.log(a);     // 1               代码2
a = 3;
console.log(a);     //3
依次输出1 3 2                           代码3
代码执行时先执行代码1 再执行代码2 定时器函数最后一个输出,

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

var flag = true;
setTimeout(function(){                        //代码1   定时器后执行
    flag = false;
},0)
while(flag){}                                        //代码2   先执行 会陷入死循环
console.log(flag);                                //运行结果浏览器卡死

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

for(var i=0;i<5;i++){
    setTimeout(function(){
         console.log('delayer:' + i );
    }, 0);
    console.log(i);
}
修改后:
for(var i=0;i<5;i++){
 ! function(i){
    setTimeout(function(){
         console.log('delayer:' + i );
    }, 0);
  }(i)
}

如何获取元素的真实宽高

var test = document.getElementsByClassName('test');
trueHeight = test.offsetHeight;
trueWidth = test.offsetWidth;
//兼容低版本IE
trueHeight = test.currentStyle.height;
trueWidth = test.currentStyle.width;



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

由于URL中只能有一些特定字符、英文、数字。有时候,由于在不同的地区,URL可能会出现中文等其他不允许在URL中出现的字符,这个时候就要对URL进行编码,成为一个合法的URL。

encodeURI()是对完整的URL进行编码,生成完整合法URL
var url ="http://jirengu/啦啦啦" 
console.log(encodeURI(url))  //"http://jirengu/%E5%95%A6%E5%95%A6%E5%95%A6"

encodeURIComponent()是把一些不能出现在URL中的字符转换为合法字符
var url ="啦啦啦" 
console.log(encodeURIComponent(url))   //"%E5%95%A6%E5%95%A6%E5%95%A6"

encodeURI方法不会对下列字符编码

1. ASCII字母
2. 数字
3. ~!@#$&*()=:/,;?+'

encodeURIComponent方法不会对下列字符编码

1. ASCII字母
2. 数字
3. ~!*()'

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

function isAndroid(){
  var system = window.navigator.userAgent;
  return /Android (\d+\.\d+)/.test(system);
}
function isIphone(){
  var system = window.navigator.userAgent;
  return /iPhone/.test(system);
}
function isIpad(){
  var system = window.navigator.userAgent;
  return /iPad/.test(system);
}
function isIOS(){
  var system = window.navigator.userAgent;
  return /Mac OS X/.test(system);
}


网友评论

      本文标题:未完待续

      本文链接:https://www.haomeiwen.com/subject/piewpxtx.html