美文网首页
关于闭包那些事儿

关于闭包那些事儿

作者: T_ttt | 来源:发表于2017-12-13 15:42 被阅读0次

    本文作者:vicky    原文出处:http://www.mamicode.com/info-detail-500673.html

    图片发自小瓶子的简书App

    1.function 函数不仅可以调来调去,还可以作为值传来传去

    2.scope 作用域 (块级作用域,基于函数的作用域)

    清晰的讲述作用域http://www.jianshu.com/p/a7f9951f329a

    函数作用域是function内 在es5 与es6中没有改变

    块级作用域是在es6中体现的 if(){} while(){} 必须用let const 来声明变量,这样才能保证外部不访问块级中的变量(感谢作者 让我清晰的明白)

    3.闭包 简单的说就是一个函数里嵌套这函数,闭包所保留的是整个变量对象。来看一个闭包经典案例

    for(var i=1; i<=9; i++) {

       setTimeout(function timer(){

       console.log( i );

    },1000);

    }

    执行结果 输出十次10 原因是 setTimeout是异步执行 ,setTimeout中的匿名function没有将 i 作为参数传入来固定这个变量的值, 让其保留下来, 而是直接引用了外部作用域中的 i, 因此 i 变化时, 也影响到了匿名function。若改为

    for(let i=1; i<=9; i++) {

    setTimeout(function timer(){

    console.log( i );

    },1000);

    }

    运用闭包

    function Person(name) {

            function getName() {

               console.log( name );

     }

         return{

            getName: getName

          };

    }

    var   littleMing = Person( "fool");

    littleMing.getName();


    相关文章

      网友评论

          本文标题:关于闭包那些事儿

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