誰かが次のコードを説明できますか?内部関数が同じ親関数内の "内部"変数にアクセスしないのはなぜですか?それでも、同じ変数をピア関数と共有しているようです。子関数内から "this"を使用して親関数の "inside"変数にアクセスできることは知っていますが、なぜこれが必要なのか困惑しています....私がおそらくもっと静的なものが必要でしょうか?私はJavaScriptの機能をラップするためにこのパターンを使用してきましたが、変数のカプセル化(より静的なもの)のこの挑戦を避ける、より良い/より簡単なパターンがあるのだろうかと思います。あなたの洞察をいただきありがとうございます。範囲内の関数内のjavascript変数の範囲
var wrap = function() {
var inside = null;
function showInside() {
console.log(inside);
}
function changeInside() {
console.log(inside);
inside += 'test';
}
return {
inside: inside,
showInside: showInside,
changeInside: changeInside
};
}();
wrap.changeInside();
wrap.showInside();
wrap.changeInside();
wrap.showInside();
console.log(wrap.inside);
質問は正確には何ですか? –
あなたの問題は、関数とはまったく関係ありません。以下はあなたが見ているものの簡略版です: 'var foo = 42; var obj = {foo:foo}; foo = 21; console.log(obj.foo); ' JavaScriptは**値渡し**です。 '{foo:foo}'は 'foo'の値の* copy *をプロパティ' foo'に割り当てます。 –
JavaScriptで値渡し**と言っても、参照を値として渡すことができるので混乱していると思います。 'foo'がオブジェクトであれば、オブジェクトのコピーではなくオブジェクトへの参照のコピーを割り当てます。 –