关于闭包

作者: 饥人谷_楠柒 | 来源:发表于2016-12-21 01:24 被阅读0次

    1. 什么是闭包? 有什么作用

    • 闭包:
          一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。闭包的特点:
         1. 作为一个函数变量的一个引用,当函数返回时,其处于激活状态。
         2. 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
          简单来说:闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
    
    • 作用:
      1.可以读取函数内部的变量:(如)


      0_1482243109358_QQ截图20161220221132.jpg
    1. 让变量的值保存在内存中:(如)


      0_1482243748299_QQ截图20161220222132.jpg

      3.闭包的另一个重要用途是实现面向对象中的对象(如)


      0_1482247629371_QQ截图20161220232655.jpg
      4.匿名自执行函数
      0_1482247836051_QQ截图20161220233006.jpg

    练习

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

    0_1482249160153_QQ截图20161220234050.jpg
    • 方法


      0_1482252006927_QQ截图20161221003916.jpg
    0_1482252051902_QQ截图20161221003926.jpg
    0_1482252066882_QQ截图20161221003935.jpg

    2. 使用闭包封装一个汽车对象,可以通过如下方式获取汽车状态

    0_1482252372976_QQ截图20161221004554.jpg
    0_1482252386076_QQ截图20161221004602.jpg

    3. 写一个函数,计算setTimeout平均[备注:新加]最小时间粒度 0_1482253370904_QQ截图20161221010239.jpg

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

    0_1482253623877_QQ截图20161221010647.jpg

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

    0_1482253732245_QQ截图20161221010840.jpg

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

    0_1482254222220_QQ截图20161221011240.jpg
    0_1482254229818_QQ截图20161221011538.jpg
    0_1482254237207_QQ截图20161221011546.jpg

    7. 如何获取元素的真实宽高 :** URL 如何编码解码?为什么要编码? ** 补全如下函数,判断用户的浏览器类型

    function trueStyle(element,pseduoElement){
     //IE不支持window.getComputedStyle(),支持element.currentStyle();
    return element.currentStyle?element.currentStyle:window.getComputedStyle(element,pseduoElement);
    }
    let trueWidth = trueStyle(element).width;
    let trueHeight = trueStyle(element).height;
    
    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
    
    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);
    }
    

    以上内容版权归饥人谷---楠柒所有 如有转载请标明出处

    相关文章

      网友评论

        本文标题:关于闭包

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