Javascript函数的所有参数是否仅通过值传递?

时间:2014-07-14 03:47:41

标签: javascript

如果我有这样的变量:

我创建了类似于ENUM的东西:

 var ContentStatusId = {
        All: 0,
        Production: 1,
        Review: 2,
        Draft: 3,
        Concept: 4
    }

当我调用这样的函数时:

doTask(myParam) {
    var a = 
}

使用doTask(ContentStatusId.All);

有什么方法可以找到传递给函数的参数,或者只是通过值完全传递?有没有其他方法可以将参数传递给函数?

2 个答案:

答案 0 :(得分:4)

在JavaScript 中,所有参数都按值传递。

在基元的情况下,该值是原始值。

function test(arg) {
  console.log(arg);
}
test(1);

arg的值为1.

但是,如果你说

test({});

然后arg将包含一个值,该值是我们刚创建的对象的参考。

修改以发表评论

你可以......

doTask(myParam) {
  if (myParam === ContentStatusId.Review) {
   // Do stuff
  }
}

doTask(ContentStatusId.Review);

doTask(myParam) {
  switch(myParam) {
     case ContentStatusId.Review:
     // Do stuff
     break;
  }
}

答案 1 :(得分:1)

javascript中没有任何调用引用传递。

所有内容都只通过传递

E.g

如果是原始值

例如

var a = 10;

console.log(a); // 10

fun xyz(a); // passing a 

function xyz(a) {
    a += 10;
    console.log(a); // 20
} // function will receive the value. If you modify it, It will still will not be reflected back to what you passed

console.log(a); // 10

其他方式,

将对象传递给函数时,将复制引用。

例如

var obj = { 'a': 10 };

console.log(obj.a); // 10

function xyz(obj) {
    obj.a = obj.a + 10;
    console.log(obj.a); // 20
} // here the obj will be copied as reference. So when you modify it, It will get reflected back to original object.

console.log(obj.a); // 20