セッターを使ってクロージャー変数を変更できると思ったのですが、変数に直接アクセスすると変更されません。ゲッターを使用してアクセスした場合にのみ、期待される再割り当てされた変数を取得します。別のスコープで作成されている 2 番目の変数はありますか? ここで何が起きてるの?
var obj = (function () {
var name = "one";
var setName = function(strName) {
name = strName;
};
var getName = function() {
return name;
};
return {
name: name,
setName: setName,
getName: getName
};
}());
obj.setName("two");
alert("obj.name is: " + obj.name); // Prints "one", but why not "two"?
alert("obj.getName() is: " + obj.getName()); // Prints "two" as I'd expect.
上記の例をフィドルに追加しました