2016-04-26 12 views
-1

内で定義された変数にアクセスすることはできません。これは私のコードです:私はJavaScriptライブラリを作成するために勉強してい私は生命維持

(function() { 
    var libby = {}; 

    libby.greet = function() { 
     console.log('heello'); 
    } 
    return libby; 
})(); 

。私はHTMLファイルに上記のファイルをインクルードし、ページをロードするとライブラリがロードされますが、コンソールにlibbyと入力すると、 "libby is defined"というエラーがスローされます。

答えて

2

戻り値は変数で取得する必要があります。

var libby = (function() { 

    var libby = {}; 

    libby.greet = function() { 
     console.log('heello'); 
    }; 
    return libby; 
}()); 

生命維持から返された値は、グローバル変数libbyに割り当てられます。内部libby変数はプライベートであり、IIFEの外部からアクセスすることはできません。


ローカル変数は、グローバルwindowオブジェクトに追加することができます。

(function() { 

    var libby = {}; 

    libby.greet = function() { 
     console.log('heello'); 
    }; 

    window.libby = libby; // Make it global 
}()); 
+0

です。正しい!! ウィンドウオブジェクトに貼り付けるだけで問題ありません:) –

1

これは、IIFE閉鎖の全体点です。 ライブラリ変数は他のライブラリの変数と衝突しません。 ライブラリを使用する場合は、ライブラリ関数にグローバルスコープでアクセスするためのIIFE以外の変数が必要です。

var somePrivateName = (function() { 

    var libby= {}; 

    libby.greet = function() 
     {   
     console.log('heello'); 
     }  return libby; 
})(); 

ここでsomePrivateNameを使用してライブラリ機能にアクセスできます。

somePrivateName.greet(); 
関連する問題