javascript中闭包内数组和附加值的创建

javascript中闭包内数组和附加值的创建,javascript,Javascript,我正在使用此代码- var gArray = (function (value) { var array = []; return function () { array.push(value); return array; } }()); gArray(1); gArray(2); gArray(3); 我希望看到这个代码片段[1,2,3] 但是我得到了[未定义,未定义,未定义] var myArray = []; function

我正在使用此代码-

var gArray = (function (value) {
    var array = [];
    return function () {
        array.push(value);
        return array;
    }
}());

gArray(1);
gArray(2);
gArray(3);
我希望看到这个代码片段
[1,2,3]

但是我得到了
[未定义,未定义,未定义]

var myArray = [];

function addToArray(value){
        myArray.push(value);
        console.log(value + " was added to " + myArray);
}

addToArray(1);
addToArray(2);
addToArray(3);
如果您归还myArray,控制台将显示[1,2,3]


如果您返回myArray控制台,控制台会显示[1,2,3]

gArray
函数没有参数,立即调用的函数有参数,但调用时不传递任何内容:

var gArray = (function (value) { //<- Argument of IIFE
    var array = [];
    return function () { //<- No arguments for gArray
        array.push(value);
        return array;
    }
}()); //<- No arguments passed to IIFE

gArray
函数没有参数,立即调用的函数有参数,但调用时不传递任何信息:

var gArray = (function (value) { //<- Argument of IIFE
    var array = [];
    return function () { //<- No arguments for gArray
        array.push(value);
        return array;
    }
}()); //<- No arguments passed to IIFE

更改
var数组=[]
to
this.array=[]


它需要有正确的作用域。

Change
var-array=[]
to
this.array=[]


它需要有正确的范围。

这是最好的方法


这是最好的方法


在这段代码中,当您的外部函数是自调用函数时,这意味着一旦您到达()它就会根据urs函数在返回时执行

function () {
        array.push(value);
        return array;
    }
将值视为未定义值,因此要解决此问题,您可以执行以下操作:

var gArray = (function () {
    var array = [];
    return function (value) {
        array.push(value);
        return array;
    }
}());

希望它能在代码中帮助您,当您的外部函数是自调用函数时,这意味着一旦您到达()它将根据urs函数在返回时执行

function () {
        array.push(value);
        return array;
    }
将值视为未定义值,因此要解决此问题,您可以执行以下操作:

var gArray = (function () {
    var array = [];
    return function (value) {
        array.push(value);
        return array;
    }
}());

希望能有所帮助

哦,我的天哪。也许其他人会觉得这很有用。我认为OP的要点是使用闭包,这样myArray就不是全局的了。@r根据他对gArray的使用情况进行评估,似乎不,他无意拥有多个实例。哦,我的错。也许其他人会发现这一点很有用。我认为OP的要点是使用闭包,这样myArray就不是全局的。@根据他对gArray的使用情况来看,似乎不是,他无意拥有多个实例。这与作用域或OP的问题无关(这是全局对象,或在严格模式下未定义)。OP的问题只与作用域间接相关。这与作用域或OP的问题无关(这是全局对象,或在严格模式下未定义)。OP的问题只与范围间接相关。