欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

关于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 &lt; 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。但是,我们可以通过创建另一个匿名函数强制让闭包的行为符合预期。