我创建了一个简单的函数,我发现了一些关于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 ....
答案 0 :(得分:2)
在JavaScript中,通过复制对象的引用来传递对象。原始类型(字符串/数字/等)按值传递。
这意味着如果传入一个对象,修改函数内的对象将反映在函数外部,因为内部和外部都会引用同一个对象。
对于基本类型,变量在传入时被复制,函数内部的变化将不再反映在函数外部的变量中。