function modify(val, newVal) {
val = newVal;
}
constructorFunc = function() {
var _private = false;
return {
modifyPrivate: function(toVal) {
return modify(_private, toVal); // LINE REFERRED TO BELOW AS X
}
};
}
var x = constructorFunc();
x.modifyPrivate(true);
x.modifyPrivate(true); // _private still starts off as false, meaning it wasn't set to true
我有一個問題是爲什麼我第二次調用x.modifyPrivate(true)爲什麼當行X運行時,傳入的_private的值仍然是'false'。模組模式中的私人成員,不可變嗎?
如果我稍微修改我的閉包知識,以便通過引用完成閉包,並且當您更改引用的值時,您不會鏈接原始引用指向的值,那麼我可以理解正在改變參考本身以指向一些新的價值...但是這整個事情是非常混亂的,我確定有人在那裏可以指出我的網絡圖解釋這一點。
我對知道如何編寫此代碼非常感興趣,因此_private實際上是爲後續調用modify()而修改的。
參數按值傳遞在JS中。這意味着你的「修改」功能是毫無意義的。即使'val'指向一個對象,它的_local_ copy(= reference也是)的值將被重寫 - 而不是對象本身。 – raina77ow
是的,謝謝,我不能相信我忘記了。閉包使用引用,函數調用使用值。對! – JayPrime2012