美文网首页
闭包_定时器_BOM

闭包_定时器_BOM

作者: hui_mamba | 来源:发表于2017-07-09 14:01 被阅读0次

    题目1: 下面的代码输出多少?修改代码让 fnArr[i]() 输出 i。使用 两种以上的方法

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

    思路:使变量i在循环过程中,创造一个局部作用域保存i的值。
    方法1:

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

    方法2:

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

    方法3:

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

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

    var Car = (function(){
        var speed = 0;
        function setSpeed(s){
            speed = s
        }
        function getSpeed() {
            return speed;
        }
        function accelerate() {
            speed +=10;
        }
        function decelerate() {
            speed = speed >= 10 ? speed - 10 : 0;
        }
        function getStatus() {
            return speed > 0 ? 'running' : 'stop';
        }
        return {
            setSpeed: setSpeed,
            getSpeed: getSpeed,
            accelerate: accelerate,
            decelerate: decelerate,
            getStatus: getStatus
        };
    })()
    Car.setSpeed(30);
    console.log(Car.getSpeed()); //30
    Car.accelerate();
    console.log(Car.getSpeed()); //40;
    Car.decelerate();
    Car.decelerate();
    console.log(Car.getSpeed()); //20
    console.log(Car.getStatus()); // 'running';
    Car.decelerate();
    Car.decelerate();
    console.log(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,因为延迟调用函数会在0秒后被放在事件队列的最后端。
    

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

    var flag = true;
    setTimeout(function(){
        flag = false;
    },0)
    while(flag){}
    console.log(flag);
    // 迟调用函数会在0秒后被放在事件执行队列的最后端,
    //在此之前flag一直为true,因此进入while循环中不能出来。
    

    题目5: 下面这段代码输出?如何输出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次,
    // 因为延迟函数中访问的i是全局作用域中的i,此时i值为5。
    
    for(var i=0;i<5;i++){
        setTimeout((function (i) {
            return function(){
                console.log('delayer:' + i );
            };
        })(i), 0);
        console.log(i);
    }
    

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

    js获取元素宽高

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

    • URL的编码/解码方法
      JavaScript提供四个URL的编码/解码方法。

    • decodeURI()

    • decodeURIComponent()

    • encodeURI()

    • encodeURIComponent()

    • 区别:
      encodeURI方法不会对下列字符编码:

    • ASCII字母

    • 数字

    • ~!@#$&*()=:/,;?+'

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

    • ASCII字母
    • 数字
    • ~!*()'

    所以encodeURIComponent比encodeURI编码的范围更大。如果你需要编码整个URL,然后需要使用这个URL,那么用encodeURI; 当你需要编码URL中的参数的时候,那么encodeURIComponent是最好方法。URI的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在URI中包含任何非ASCII字符,例如中文。否则如果客户端浏览器和服务端浏览器支持的字符集不同的情况下,中文可能会造成问题。(两个方法把空格编码为"%20")

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

    function isAndroid(){
        return /Android/.test(window.navigator.userAgent);
    }
    function isIphone(){
        return /iphone/i.test(window.navigator.userAgent);
    }
    function isIpad(){
        return /ipad/i.test(window.navigator.userAgent);
    }
    function isIOS(){
        return /(iphone)|(ipad)/i.test(window.navigator.userAgent);
    }
    

    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1
    1

    相关文章

      网友评论

          本文标题:闭包_定时器_BOM

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