BOM

题目1: 下面的代码输出多少?修改代码让 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(i){
            fnArr[i] =  function(){
            return i
        }
        }(i)
    }
    console.log( fnArr[3]() );
 //第二种
    var fnArr = [];
    for (var i = 0; i < 10; i ++) { 
        fnArr[i] =  function(i){
           return function(){
            return i
        }
        }(i)
    }
    console.log( fnArr[3]() ); 

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

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

题目3:下面这段代码输出结果是? 为什么?

var a = 1;
    setTimeout(function(){
        a = 2;
        console.log(a);
    }, 0);
    var a ;
    console.log(a);
    a = 3;
    console.log(a);//输出 1  3   2 因为setTimeout要在所有执行完毕后才执行

题目4:下面这段代码输出结果是? 为什么?

var flag = true;
    setTimeout(function(){
        flag = false;
    },0)
    while(flag){}
    console.log(flag); //while没有执行代码 导致空循环 ,后面的执行代码也不会执行

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

 for(var i=0;i<5;i++){
    setTimeout(function(){
         console.log('delayer:' + i );
    }, 0);
    console.log(i);
    }//输出0 1 2 3 4  delayer:5 * 5  
for(var i=0;i<5;i++){
    !function (i){
        setTimeout(function(){
         console.log('delayer:' + i );
    }, 0)}(i)
    console.log(i); 
    }

题目6: 如何获取元素的真实宽高

window.getComputedStyle('元素').width获取宽
window.getComputedStyle('元素').height获取高
IE8之前则要使用element.currentStyle

题目7: URL 如何编码解码?为什么要编码?

因为网络标准RFC 1738做了硬性规定:只有字母和数字[0-9a-zA-Z]、一些特殊符号"$-_.+!*'(),"[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL
所以URL中如果有其他字,为了不出现乱码就必须编码后使用
encodeURI()方法编码后,它输出符号的utf-8形式,并且在每个字节前加上%。并且不会对下列字符编码:

  1. ASCII字母
  2. 数字
  3. ~!@#$&*()=:/,;?+'
    对应的解码方法为decodeURI()
    encodeURIComponent()方法不会对下列字符编码:
  4. ASCII字母
  5. 数字
  6. ~!*()'
    对应的解码方法为decodeURIComponent()

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

var user =window.navigator.userAgent
function isAndroid(){
    if(/Android/.test(user)){
        return isAndroid
    }
}
function isIphone(){
    if(/Iphone/.test(user)){
        return isIphone
    }
}
function isIpad(){
    if(/Ipad/.test(user)){
        return isIpad
    }
}
function isIOS(){
    if(/IOS/.test(user)){
        return isIOS
    }
}

你可能感兴趣的:(BOM)