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

标签 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);
}

fiddle 是here .

也许这些年来我一直在误解 Javascript,但我本来期望 isEven check()内与原来一样isEven .....但是你可以在日志中看到,外面 isEven保持为 0....

最佳答案

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

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

对于原始类型,变量在传入时会被复制,函数内部的更改将不再反射(reflect)在函数外部的变量中。

关于javascript - 传递给函数的变量仅在函数内更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36024122/

相关文章:

JavaScript 和复选框 - 过滤

javascript - 对新数组的多重响应

Javascript:切片和附加 keyValue 后重复数组不正确

java - 将自由标记列表分配给 Javascript 数组

javascript - 有没有办法阻止 Karma 提供缓存文件?

javascript - toString 中的 document.getElementById

java - 使用 Java 操作 Javascript

javascript - 在 vue.js 中动态添加元素

Javascript for循环ajax潜在的竞争条件?

javascript - 动画交叉淡入淡出表格单元格/行?