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的参考所以我发布了这个问题 希望它不是太愚蠢。谢谢。
答案 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
在您的第二个示例中,您会混淆参数及其值。函数的参数应该始终是变量,因为它们可以很好地保存任何值(不仅仅是字符串!)。因此,函数声明应该对保存值的变量执行操作,并且在调用函数时,可以直接传递带有值或字符串值的变量(如第一个示例中的情况)。
希望有所帮助!