javascript中通过初始化器函数传递参数时出现问题

javascript中通过初始化器函数传递参数时出现问题,javascript,arrays,arguments,Javascript,Arrays,Arguments,在使用初始化器函数时,我在通过新对象传递参数时遇到问题。考虑下面的例子,我希望能够创建一个返回数组的对象。对象Ex1可以很好地执行此操作: Ex1 = function() { myVar = []; myVar = Array.apply( myVar, arguments ); return myVar; }; ex1 = new Ex1( 'red', 'green', 'blue' ); console.log( ex1); /* ["red", "gree

在使用初始化器函数时,我在通过新对象传递参数时遇到问题。考虑下面的例子,我希望能够创建一个返回数组的对象。对象Ex1可以很好地执行此操作:

Ex1 = function() {

    myVar = [];
    myVar = Array.apply( myVar, arguments );
    return myVar;

};

ex1 = new Ex1( 'red', 'green', 'blue' );
console.log( ex1);
/* ["red", "green", "blue"] */
然而,我想给我们一个初始化器来保持我的代码干净。对象Ex2显示我的意外结果:

Ex2 = function() {

    init = function() {
        myVar = [];
        myVar = Array.apply( myVar, arguments );
        return myVar;
    };

    return init( arguments );

};

ex2 = new Ex2( 'red', 'green', 'blue' );
console.log( ex2 );
/* [[object Arguments] {
   0: "red",
   1: "green",
   2: "blue"
   }] */
从日志中可以看出,结果不是一个干净的数组


使用初始化器函数创建新对象并向其传递参数时,如何返回数组?

这个问题不难理解。在函数中,
arguments
是一个类似数组的对象,它包含传入的所有参数。在第二个示例中,您将数组作为参数传递给init函数,因此init函数中的
arguments
是一个2D数组

Ex2 = function() {   
    init = function() {
        myVar = [];
        myVar = Array.apply( myVar, arguments );//arguments: [["red", "green", "blue"]]
        return myVar;
    };

    return init( arguments );//arguments: ["red", "green", "blue"]  
};
您可以使用一个参数,例如:

Ex2 = function() {
    var init = function(argu) {
        return Array.apply( 0, argu );//argu: ["red", "green", "blue"]
    };
    return init( arguments );
};
ex2 = new Ex2( 'red', 'green', 'blue' );
console.log( ex2 );//["red", "green", "blue"]

另一件事是声明一个变量而不使用
var
将把它置于全局范围。

你需要学习使用局部变量…一个非常有用的注释…啊,我现在明白了。通过将arguments对象作为参数传递,它被包装在另一个arguments对象中。谢谢你的帖子和良好的睡眠帮助我理解了。:)