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