关于闭包那些事儿

2017-12-13  本文已影响0人  T_ttt

本文作者: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();


上一篇下一篇

猜你喜欢

热点阅读