关于var函数作用域,闭包与let的区别应用
程序员文章站
2022-01-10 19:57:23
...
关于var函数作用域,闭包与let的区别应用。这个跟大家分享一下两者之间的区别,话不多说,看代码。
var a = []; for (var i = 0; i < 10; i ) { a[i] = (function(j){ return function(){ console.log(j); }; })(i); } a[7](); var b = []; for (let i = 0; i < 10; i ) { b[i] = function(){ console.log(i); }; } b[7](); var pubvar = 1;
这两个结果是一样的,关于闭包的var
function createFunctions(){ var result = new Array(); for (var i=0; i < 10; i ){ result[i] = function(){ return i; }; } return result; } ClosureExample01.htm
这个函数会返回一个函数数组。表面上看,似乎每个函数都应该返自己的索引值,即位置0 的函数,返回0,位置1 的函数返回1,以此类推。但实际上,每个函数都返回10。因为每个函数的作用域链中。
都保存着createFunctions() 函数的活动对象, 所以它们引用的都是同一个变量i 。当createFunctions()函数返回后,变量i 的值是10,此时每个函数都引用着保存变量i 的同一个变量
对象,所以在每个函数内部i 的值都是10。但是,我们可以通过创建另一个匿名函数强制让闭包的行为符合预期。