函数参数在其他地方声明?

时间:2016-02-22 08:12:47

标签: javascript

function preload() {
                for (i = 0; i < preload.arguments.length; i++) {
                    images[i] = new Image()
                    images[i].src = preload.arguments[i]
                }
            }
            preload(
                "http://domain.tld/gallery/image-001.jpg",
                "http://domain.tld/gallery/image-002.jpg",
                "http://domain.tld/gallery/image-003.jpg"
            )

我是javascript的新手,我碰巧看到了这些代码行 我想知道代码是否将函数参数移动到代码的后半部分?
这意味着它与以下相同。

function preload("http://domain.tld/gallery/image-001.jpg",
                "http://domain.tld/gallery/image-002.jpg",
                "http://domain.tld/gallery/image-003.jpg") {
                for (i = 0; i < preload.arguments.length; i++) {
                    images[i] = new Image()
                    images[i].src = preload.arguments[i]
                }
            }  

因为我看不到关于w3cschool的参考所以我发布了这个问题 希望它不是太愚蠢。谢谢。

2 个答案:

答案 0 :(得分:2)

在您提供的第二个代码段中,正在声明preload方法,这意味着您不能将数据作为参数传递,您只能声明这些参数的名称。您发布的第一个片段由两部分组成。函数声明和对该函数的调用,有三个URL作为参数。

请注意,在函数声明中,实际上没有定义任何参数。好像该函数不应该接受任何函数。这是因为,所述函数的创建者决定该函数应该接收的参数量是可变的。

为此,他使用arguments数组,每个JavaScript函数都在其范围内。它是一个类似于数组的对象,它包含传递给函数的每个参数。

答案 1 :(得分:1)

了解参数如何工作非常重要。请看下面的例子:

function func1(arg1, arg2, arg3) {
    console.log(arg1);
    console.log(arg2);
    console.log(arg3);
}

function func2() {
    for(var i=0; i<arguments.length; i++) {
        console.log(arguments[i]);
    }
}

这两个函数相当于三个参数:

func1('test1', 'test2', 'test3');            // Output:  test1, test2, test3
func2('test1', 'test2', 'test3');            // Output:  test1, test2, test3

然而,只有第二个会打印出所有四个参数,而第一个只会打印出三个参数:

func2('test1', 'test2', 'test3');             // Output:  test1, test2, test3
func2('test1', 'test2', 'test3', 'test4');    // Output:  test1, test2, test3, test4

在您的第二个示例中,您会混淆参数及其值。函数的参数应该始终是变量,因为它们可以很好地保存任何值(不仅仅是字符串!)。因此,函数声明应该对保存值的变量执行操作,并且在调用函数时,可以直接传递带有值或字符串值的变量(如第一个示例中的情况)。

希望有所帮助!