创建闭包(closures)的方式:在一个函数内部创建另一个函数
闭包:函数内部的函数有权访问函数作用域的变量
实例1:
for(var i = 0; i < 10; i++) { setTimeout(function() { console.log(i); }, 10); }分析:输出结果为10次10。setTimeout函数是异步函数,会在当前的调用栈完成后执行,即循环完成之后执行。 闭包内部引用的是外部变量i,i的值为10,因此,输出结果都是10;
实例2:
for(var i = 0; i < 10; i++) { setTimeout((function(num) { console.log(num); })(i), 10) }分析:通过创建IIFE(自执行函数表达式)让结果输出1-9;
它会创建一个作用域,将i传递进去。此时,i是一个局部变量,(不再是在闭包中引用i)。
实例3:
function createFunctions(){ var result=[]; for (var i = 0; i < 10; i++) { result[i]=function(){ return i; }; } return result; } var arr=createFunctions(); console.log(arr); for (var i = 0; i < arr.length; i++) { console.log(arr[i]()); }分析:结果为10次10;
实例四:
function createFunctions(){ var result=[]; for (var i = 0; i < 10; i++) { result[i]=(function(num){ return num; })(i); } return result; } var arr=createFunctions(); console.log(arr);
分析:输出结果为[0,1,2,3,4,5,6,7,8,9];
扫描二维码关注公众号,回复:
170864 查看本文章
欢迎指正!