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
私が持っている 1 つの質問は、なぜ x.modifyPrivate(true) を 2 回目に呼び出したのかということです。行 X が実行されたときに、渡された _private の値がまだ「false」であるのはなぜですか。
クロージャーに関する私の知識を少し変更して、クロージャーが参照によって行われるようにすると、これを理解できます。参照の値を変更すると、元の参照が指していた値を変更しているのではなく、参照を変更しています。それ自体が何らかの新しい価値を指し示している...しかし、これは全体的に非常に紛らわしいので、誰かがこれを説明するネット上の図を教えてくれると確信しています。
また、modify() へのその後の呼び出しで _private が実際に変更されるように、このコードを記述する方法を知ることにも非常に興味があります。