闭包

36 阅读1分钟
function f1(){
    var n=999;
    nAdd=function(){n+=1}
    function f2(){
      alert(n);
    }
    return f2;
  }
  var result=f1();
  result(); // 999
  nAdd();
  result(); // 1000

在这个函数中function f2(){},其实是相当于var f2=function(){} 在外面我们和可以nAdd() 访问nAdd这个函数但是我们不能访问f2()这个函数 因为nAdd=function(){} 是想一个函数赋给一个全局变量,没有var 就是声明的全局变量,闭包没意思,我觉得就是个变量作用域的事 来看一下那个经典的面试题

 "use strict";
    var ul = document.getElementsByTagName('ul')[0];
    var li = ul.getElementsByTagName('li');
    // for (var i = 0, len = li.length; i < len; i++) {
    //     (function(j) {
    //         li[i].addEventListener('click', function() {
    //             alert(j);
    //         })
    //     })(i)

    // }
    //这个问题主要是JavaScript缺少块作用域
    //这样玩
    // for(var i = 0,len=li.length;i<len;i++ ){
    //     (function(){
    //         var temp = i;
    //         li[temp].addEventListener('click',function(){
    //             console.log(temp)
    //         })

    //     })()
    // }
    for(let i =0,len=li.length;i<len;i++){
        li[i].addEventListener('click',function(){
            console.log(i)
        })
    }