function outerFunction(x){
return function(y){
x=x+1;
console.log(x+y);
}
}
var myVal = new Number(2); //myVal is an object
console.log(myVal); //prints Number{[[PrimitiveValue]]: 2}
var innerFunction = outerFunction(myVal); //I'm passing myVal obj
innerFunction(10) //13
innerFunction(10) //14
innerFunction(10) //15
console.log(myVal); //prints Number{[[PrimitiveValue]]: 2} instead of 5?
我預計最後console.log
打印Number{[[PrimitiveValue]]: 5}
,因爲我通過myVal object
到outerFunction
和JS對象是通過引用傳遞,它爲什麼沒有打印5?使用的console.log值對象不改變(按引用傳遞)
回覆:「在JS對象是通過引用傳遞」:這不是真的(因爲你的代碼的惡魔trates)。 – ruakh
@ruakh我將我的代碼更改爲var myObj = {a:2},並將myObj傳遞給outerfunction ..並執行了x.a = x.a +1;和console.log確實已更改爲{a:5},確認對象通過引用傳遞 –
@ruakh對象作爲引用的副本傳遞,因此您必須區分突變和重新分配 – rand