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

Variable passed into function only changed within function

本文关键字:函数 变量      更新时间:2023-09-26

我创建了一个简单的函数,我注意到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);
}

小提琴来了。

也许这些年来我一直在误解Javascript,但我本以为check()中的isEven与原始isEven相同.....但是您可以在日志中看到,外部isEven保持为 0....

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

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

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