ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 闭包 > 定义:简单来说,闭包就是指有权访问另一个函数作用域中的变量的函数 ## 常见问题 1. 判断代码输出结果 ~~~ for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000); } // 输出 5 5 5 5 5 ~~~ 那么如何正确输出呢? 有一下几个方法: #### 创建立即执行函数 ~~~ for (var i = 0; i < 5; i++) { (function(j) { // j = i setTimeout(function() { console.log(j); }, 1000); })(i); } // 输出 0 1 2 3 4 ~~~ #### 使用let作用域 ~~~ for (let i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000); } // 输出 0 1 2 3 4 ~~~ #### 使用 setTimeout第三个参数可以直接传递回调函数的参数 ~~~ for (var i = 0; i < 5; i++) { setTimeout(function(i) { console.log(i); }, 1000,i); } // 输出 0 1 2 3 4 ~~~ 2. 以下代码输出结果 ~~~ (function(x) { return (function(y) { console.log(x); })(2) })(1); //输出 1 ~~~