And*_*ard 355 javascript
我试过以下但没有成功:
function a(args){
b(arguments);
}
function b(args){
// arguments are lost?
}
a(1,2,3);
Run Code Online (Sandbox Code Playgroud)
在函数a中,我可以使用arguments关键字来访问参数数组,在函数b中这些参数丢失了.有没有办法将参数传递给另一个javascript函数,就像我尝试做的那样?
Nic*_*ver 522
用于.apply()
对arguments
函数进行相同的访问b
,如下所示:
function a(){
b.apply(null, arguments);
}
function b(){
alert(arguments); //arguments[0] = 1, etc
}
a(1,2,3);?
Run Code Online (Sandbox Code Playgroud)
Wal*_*anG 197
spread运算符允许在需要多个参数(用于函数调用)或多个元素(用于数组文字)的位置扩展表达式.
ECMAScript ES6添加了一个新的运算符,允许您以更实际的方式执行此操作:... Spread运算符.
不使用该apply
方法的示例:
function a(...args){
b(...args);
b(6, ...args, 8) // You can even add more elements
}
function b(){
console.log(arguments)
}
a(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
Note 如果您的浏览器仍使用ES5,则此代码段会返回语法错误.
编者注:由于代码片段使用console.log()
,您必须打开浏览器的JS控制台才能看到结果 - 没有页内结果.
它会显示以下结果:
简而言之,如果您使用数组,扩展运算符可以用于不同的目的,因此它也可以用于函数参数,您可以在官方文档中看到类似的示例:Rest参数
Way*_*ett 78
,没有任何其他的答案中提供的解释是,原来的参数是仍然可用,但不是在原来的位置arguments
的对象.
所述arguments
对象包含提供给函数每个实际参数的一个元件.当你调用a
你提供三个参数:编号1
,2
和,3
.所以,arguments
包含[1, 2, 3]
.
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
Run Code Online (Sandbox Code Playgroud)
b
但是,当你调用时,你只传递一个参数:a
's arguments
object.所以arguments
包含[[1, 2, 3]]
(即一个元素,它是具有包含原始参数的属性a
的arguments
对象a
).
function b(args){
// arguments are lost?
console.log(arguments) // [[1, 2, 3]]
}
a(1,2,3);
Run Code Online (Sandbox Code Playgroud)
正如@Nick演示的那样,您可以使用在调用中apply
提供set arguments
对象.
以下结果取得了相同的结果:
function a(args){
b(arguments[0], arguments[1], arguments[2]); // three arguments
}
Run Code Online (Sandbox Code Playgroud)
但apply
在一般情况下是正确的解决方案.
归档时间: |
|
查看次数: |
167521 次 |
最近记录: |