请接受我的道歉,因为我是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];
}根据主要文件,我没有找到想要的方法,我在参数对象创建过程中发现的是:
在indx >= 0时重复,让val是0-原始列表位置indx处的args元素.
而我不能指定这与分配值的过程有关。
所以根据上面的说法,
哪个解决方案是正确的?如何将参数分配给参数?如果我们将值1作为参数传递,那么在函数范围内,1将被赋值给x,或者1将被赋值给参数对象?。
发布于 2017-05-22 09:28:56
假设您有这样的功能:
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);,参数对象将拥有所有三个参数,但是只有第一个param 1将被分配给函数变量x。
发布于 2017-05-22 09:51:07
如果您将函数中的参数命名为:
function myFunction(x,y,z)
{
console.log(x, y, z);
}那么最好直接用他们的名字来访问他们。
如果在定义函数时不知道参数的数量,例如argumens,可以使用Math.max()。
ES6比以前更容易使用参数,但它非常相似。请记住,arguments 不是数组,因此如果您想要访问所有数组的方法,就必须将其转换为数组。
function myFunc_ES6() {
var args = [...arguments];
// or
//var args = Object.values(arguments)
args.forEach(arg => console.log(arg));
}
function myFunc_ES5() {
var args = Array.prototype.slice.apply(arguments);
args.forEach(function(arg) {
console.log(arg);
});
}
myFunc_ES6(1,2,3,4);
myFunc_ES5(6,7,8,9);发布于 2017-05-22 10:40:58
参数对象JavaScript函数有一个内建对象称为参数对象。 参数对象包含调用(调用)函数时使用的参数数组。
如parameters.asp中所述
当您不想显式指定函数的参数时,可以使用arguments。这在许多情况下都是有用的。例如:
不同参数的不同行为
function foo() {
if(arguments.length == 2){
// do something
}else{
//do something else
}
}推广某些方法
var oldMethod = Object.prototype.method;
Object.prototype.method = function() {
// some extended functionality
// then call the original
oldMethod.apply(this, arguments);
}使用未知数量的参数
function average(){
var i, s=0;
if(!arguments.length){
throw('Division by zero.');
}
for(i=0;i<arguments.length;i++){
s+=arguments[i];
}
return s/arguments.length;
}关于赋值的方式,如果我们有一个函数:
function foo(x){}不管您作为参数传递了什么,这都是正确的:
x === arguemnts[0]它几乎类似于参数中引用的x,因为对参数的操作也会改变参考文献:
arguments[0]++;
x === arguments[0] // true但是,删除参数不会修改显式参数值。
delete arguments[0]
x !== undefinedhttps://stackoverflow.com/questions/44109126
复制相似问题