javascript - 当我们在函数本身内部传递参数时会发生什么?

标签 javascript

请接受我作为 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。

fiddle here

关于javascript - 当我们在函数本身内部传递参数时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44109126/

相关文章:

javascript - 从 chrome 扩展弹出窗口访问网站 localStorage

javascript - 在 Firefox 中检测对 "input"事件的删除操作

javascript - ajax中从字符串中提取十进制数字

javascript - 选择器获取父级的上一个

javascript - 通过 JQuery 调用不显示 Bootstrap 模态窗口

javascript - 为什么我的嵌套 for 循环中的代码不会被执行?

javascript - CPU 与内存使用情况(理论)

javascript - 主干 View 中的 Div id 持久性

javascript - 使用 jQuery 从字符串中获取第一个 id

javascript - 将文档存储在变量中