函数参数在其他地方声明

function argument declare in other place?

本文关键字:声明 方声明 参数 其他 函数      更新时间:2023-09-26
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 上没有看到任何参考资料,所以我发布了这个问题。
希望它不会太愚蠢。谢谢。

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

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

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

了解参数的工作原理非常重要。 请看以下示例:

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

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

希望对您有所帮助!