请接受我作为 JS 初学者的歉意。 我停止研究 JS 的一个问题是,函数内部传递参数时发生的情况的正确答案是什么,让我们通过代码片段来描述。
function myFun(x){
console.log(arguments);
console.log(x);
}
myFun(1);
根据上面的例子, 发生的正确操作是:
示例 1
when passing calling myFun(1) this will do :
function myFunction(x){
var x = 1
}
或 示例2
function myFunction(x,y,z){
x=arguments[0];
y=arguments[1];
z=arguments[2];
}
根据main documentation ,我没有找到所需的方法,我在参数对象创建过程中发现的是:
Repeat while indx >= 0, Let val be the element of args at 0-origined list position indx.
我无法指定这与分配值的过程是否相关。
所以根据上面的说法,
哪个解决方案是正确的? 实参如何赋值给形参?如果我们传递值1作为参数,在函数作用域中,1将被分配给x还是1将被分配给arguments对象?
最佳答案
假设您有一个这样的函数:
function oneParam(x)
{
console.log(arguments[0]);
console.log(x);
}
像这样调用它:oneParam(1);
会将传入的第一个参数放入参数数组中。如果运行上面的代码,您将获得打印两次相同的值,因为它们是相同的。
1
1
现在让我们采用一个具有多个参数的函数:
function myFunction(x,y,z)
{
console.log(arguments[0], arguments[1], arguments[2]);
x=arguments[0];
y=arguments[1];
z=arguments[2];
console.log(x, y, z);
}
您会注意到,像这样调用此函数 myFunction("a","b","c");
将产生两个相似的输出。
a b c
a b c
所以本质上,这两种情况都是正确的。仅取决于您调用函数时传入的内容。
<小时/>编辑:澄清一下,参数对象将包含您传入的所有参数。这些参数将按顺序分配给函数签名中的命名变量。
因此,您甚至可以使用 oneParam(1, 2, 3);
并且参数对象将具有所有三个参数,但只有第一个参数 1
会被分配到函数变量x。
关于javascript - 当我们在函数本身内部传递参数时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44109126/