传递给函数的变量仅在函数内改变

时间:2016-03-15 23:22:46

标签: javascript

我创建了一个简单的函数,我发现了一些关于javascript的意外。当我将变量传递给函数时,然后更改它,它不会在该函数之外更改。下面是一些代码:

function check(val, isEven) {
    if (val % 2 === 0){
    isEven++;
    console.log('incremented isEven is ', isEven);
  }
}

var arr = [1, 2, 3, 4, 5, 6, 7, 8];

var isEven = 0;

for (var x = 0; x < arr.length; x++) {

  check(arr[x], isEven);

  console.log('isEven is now ', isEven);
}

小提琴是here

也许这些年来我一直在误解Javascript,但我希望isEven中的check()与原isEven相同.....但是你可以在日志中看到,isEven之外的内容保持为0 ....

1 个答案:

答案 0 :(得分:2)

在JavaScript中,通过复制对象的引用来传递对象。原始类型(字符串/数字/等)按值传递。

这意味着如果传入一个对象,修改函数内的对象将反映在函数外部,因为内部和外部都会引用同一个对象。

对于基本类型,变量在传入时被复制,函数内部的变化将不再反映在函数外部的变量中。