Liuyidi's Blog

javascript基础学习系列之闭包

2015-03-25

一、什么是闭包?


函数可以访问它被创建时所处的上下文环境,这被称为闭包, 换句话说闭包中的函数可以记忆它被创建时候的环境。

经典实例:

  ```js
  
   for(var i=0; i<5; i++){  
     (function(i){
        setTimeout(function({ console.log(i); },i*1000);   
     })(i);
   }
  ``` 

ES6的解决方案: 声明let,让其变成块作用域

```js

for(let i=0; i<5; i++){

    setTimeout(function(){ console.log(i); },i*1000);
    
}    ```

二、闭包的常用场景


事件处理和闭包结合

常见错误一:在循环中创建闭包

```js // 常见错误一:在循环中创建闭包 var addHandler = function(nodes){

for(var i=0; i<nodes.length; i++){
    nodes[i].onclick = function(e){
        alert(i);
    }
}   }

//正确的做法 var clickHandler = function(nodes){

  for(var i=0; i<nodes.length; i++){
      nodes[i].onclick = function(i){
          return function(){
             alert(i);
          }
      }(i);
  }   }   clickHandler();   ```
评论