请问高程三中 7.2.1 - 闭包与变量 这小节中的两个例子为什么无法跑出书中的结果?

这是例一,按照书中说的函数返回的值应该是[10,10,10,10,10,10,10,10,10,10],可是返回的确是函数体本身

https://img4.mukewang.com/5c8a00350001ea4207830110.jpg


function createFunctions(){ 

    var result = new Array(); 

 

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

        result[i] = function(){ 

            return i; 

        }; 

    } 

 

    return result; 

例二也是,返回的不是下标本身而是函数体


function createFunctions(){ 

    var result = new Array(); 

 

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

        result[i] = function(num){ 

            return function(){ 

                return num; 

            }; 

        }(i); 

    } 

 

    return result; 

我将例一改成下面这样到是可以返回数字,但返回的是下标而不是10。


function createFunctions(){ 

    var result = new Array(); 

 

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

        result[i] = (function(){ 

            return i; 

        })(); 

    } 

 

    return result; 

请问是为什么?


湖上湖
浏览 563回答 2
2回答

肥皂起泡泡

你再读读,我第一次的时候也读错了;这个函数会返回一个函数数组。表面上看,似乎每个函数(函数数组里的每个函数)都应该返回自己的索引值,即位置0 的函数返回0,位置1 的函数返回1,以此类推。但实际上,每个函数(函数数组里的每个函数)都返回10;在重写了前面的createFunctions()函数后,每个函数(函数数组里的每个函数)就会返回各自不同的索引值了。

小唯快跑啊

例1返回的是数组,只是数组的成员是函数。你看两边还有中括号第二个同理啦
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript