猿问

关于闭包的那个程序没读懂,希望大神帮忙解读

function createFunctions() {

    var result=new Array();

    for (var i=0;i<10;i++)

    {

        result[i]=function() {

            return i;

        };    

    }

    return result;

}


这个result每次返回的值是10 ,


function createFunctions() {

    var result=new Array();

    for (var i=0;i<10;i++)

    {

        result[i]=function(num) {

            return function(){

                return num;

            };

        }(i);

    }

    return result;

}

这个result为什么返回的是索引值,不懂这两个哪里不同,希望有人解答 , 谢谢


我是匿名
浏览 1593回答 3
3回答

阿里斯托亚

函数自己是不会执行的, 除非调用。你第一个例子其实是返回了10个元素全是function(){return i}的数组    就是[function(){return i},function(){return i},function(){return i},function(){return i},function(){return i},function(){return i},function(){return i},function(){return i},function(){return i},function(){return i}]    当你执行数组里的这些匿名函数的时候for已经结束了,i就变成了最后的10       第二个例子是for每循环一次匿名函数执行一次  并将执行结果赋值给数组
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答