他の回答は、オブジェクトの構文とスコープ内での関数の呼び出しを十分にカバーしています。コメントで述べたように、これを行うことができます:
function outer(){
(function () {
var c = "inner";
console.log(c)
})();
}
window.outer();
そして、それは問題なく記録されinner
ます。
編集:元のコード サンプルのようなプライベート/非表示の変数innerFct
は、クロージャーでもキャプチャできます。
outer = function() {
var innerFct = function () { console.log("inner"); }
// innerFct is captured in the closure of the following functions
// so it is defined within the scope of those functions, when they are called
// even though it isn't defined before or after they complete
window.wrapper = function() { innerFct(); }
return function() { innerFct(); }
}
outer();
// each of these next three lines logs "inner"
window.wrapper(); // assigned to global variable
outer()(); // calling the returned function
var innerFctBackFromTheDead = outer(); // saving the returned function
innerFctBackFromTheDead();
オブジェクト コンストラクター/プロトタイプ構文もあります。
function Outer() {
this.inner = function() {
this.c = "inner";
console.log(this.c);
}
}
var out = new Outer();
out.c; // undefined
out.inner(); // logs "inner"
out.c; // "inner"
新しいキーワードとプロトタイプの詳細: http://pivotallabs.com/javascript-constructors-prototypes-and-the-new-keyword/