面试题中的闭包

  var arr = [];
    for(var i=0; i<3; i++) {
      arr[i] = function(){
       console.log(i)
     }
   }
//输出 3 3 3
//因为闭包。即使他的上下文已经销毁,但是它仍然存在,依然引用外部变量
//改写1  利用立即执行函数 开辟封闭的变量作用域环境
for(var i=0; i<3; i++) {
    (function(i){
        arr[i] = function(){
            console.log(i)
        }
    })(i)
 //改写1.2 
for(var i=0; i<3; i++) {
  arr[i] = function(i){
  return function() {
   console.log(i)
  }
  }(i)
}
    //  改写2 //利用let行程封闭作用域
  for(let i=0; i<3; i++) {
     arr[i] = function(){
         console.log(i)
     }
   }
  //改写3 //利用了 参数传递  按值传递
  function getNumber(i) {
    return function() {
        console.log(i)
    }
  }
  for(var i=0; i<3; i++) {
    arr[i] = getNumber(i)
  }
 }

你可能感兴趣的:(面试题中的闭包)