JS面试知识点4-闭包

闭包:

  • 结合面试回答的时候:
    • 项目中是否用到,用到有什么两点。

函数A中有一个函数B,函数B能够访问到函数A的变量,函数B就是闭包。
概念上就是:闭包就是能够访问另一个函数作用域变量的函数。
在JS中函数中,定义一个函数,函数内查找变量只能在自身函数作用域找,找不到则到window中查找。
但是闭包的函数是可以访问到另一个函数作用域中的变量。

闭包存在的意义:
能够访问到函数内部的变量

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

因为setTimerout是异步的,所以for循环会先执行完毕,i为6,所以输入一堆6;

如果修改函数让其依次输出

方法1:let+作用域

for (let i = 1; i <= 5; i++) {
    
    
    setTimeout(() => {
    
    
    console.log(i);
    }, i * 1000);
}

方法2: 自调+闭包

for (var i = 1; i <= 5; i++) {
    
    
    (function (j) {
    
    
    setTimeout(() => {
    
    
        console.log(j);
    }, j * 1000);
    })(i);
}

方法3:setTimeout第三个参数

for (var i = 1; i <= 5; i++) {
    
    
  setTimeout(
    (i) => {
    
    
    console.log(i);
    },
    i * 1000,
    i
);
}

猜你喜欢

转载自blog.csdn.net/weixin_43374360/article/details/114277460