首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我们在函数本身内传递参数时会发生什么?

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

Stack Overflow用户
提问于 2017-05-22 09:17:44
回答 3查看 270关注 0票数 1

请接受我的道歉,因为我是JS的初学者。我不再研究JS,在传递参数时,函数内部发生的事情的正确答案是什么,让我们用代码片段来描述。

代码语言:javascript
复制
function myFun(x){
   console.log(arguments);
   console.log(x);
}
myFun(1);

根据上面的例子,所发生的正确行为是:

示例1

代码语言:javascript
复制
when passing calling myFun(1) this will do : 
    function myFunction(x){
    var x = 1
    }

或示例2

代码语言:javascript
复制
 function myFunction(x,y,z){
    x=arguments[0];
    y=arguments[1];
    z=arguments[2];
    }

根据主要文件,我没有找到想要的方法,我在参数对象创建过程中发现的是:

在indx >= 0时重复,让val是0-原始列表位置indx处的args元素.

而我不能指定这与分配值的过程有关。

所以根据上面的说法,

哪个解决方案是正确的?如何将参数分配给参数?如果我们将值1作为参数传递,那么在函数范围内,1将被赋值给x,或者1将被赋值给参数对象?

EN

回答 3

Stack Overflow用户

发布于 2017-05-22 09:28:56

假设您有这样的功能:

代码语言:javascript
复制
function oneParam(x)
{
    console.log(arguments[0]);
    console.log(x);
}

按如下方式调用:oneParam(1);将把传入的第一个参数放入参数数组中。如果您运行上述代码,您将得到相同的值打印两次,因为它们是相同的。

1

1

现在,让我们使用一个包含多个参数的函数:

代码语言:javascript
复制
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。

小提琴在这里

票数 0
EN

Stack Overflow用户

发布于 2017-05-22 09:51:07

如果您将函数中的参数命名为:

代码语言:javascript
复制
function myFunction(x,y,z)
{
    console.log(x, y, z);
}

那么最好直接用他们的名字来访问他们。

如果在定义函数时不知道参数的数量,例如argumens,可以使用Math.max()

ES6比以前更容易使用参数,但它非常相似。请记住,arguments 不是数组,因此如果您想要访问所有数组的方法,就必须将其转换为数组。

代码语言:javascript
复制
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);
票数 0
EN

Stack Overflow用户

发布于 2017-05-22 10:40:58

参数对象JavaScript函数有一个内建对象称为参数对象。 参数对象包含调用(调用)函数时使用的参数数组。

parameters.asp中所述

当您不想显式指定函数的参数时,可以使用arguments。这在许多情况下都是有用的。例如:

不同参数的不同行为

代码语言:javascript
复制
function foo() {
   if(arguments.length == 2){
     // do something
   }else{
     //do something else
   }
}

推广某些方法

代码语言:javascript
复制
var oldMethod = Object.prototype.method;
Object.prototype.method = function() {
 // some extended functionality
 // then call the original
 oldMethod.apply(this, arguments);
}

使用未知数量的参数

代码语言:javascript
复制
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;
}

关于赋值的方式,如果我们有一个函数:

代码语言:javascript
复制
function foo(x){}

不管您作为参数传递了什么,这都是正确的:

代码语言:javascript
复制
x === arguemnts[0]

它几乎类似于参数中引用的x,因为对参数的操作也会改变参考文献:

代码语言:javascript
复制
arguments[0]++;
x === arguments[0] // true

但是,删除参数不会修改显式参数值。

代码语言:javascript
复制
delete arguments[0]
x !== undefined
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44109126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档