2017-04-24 22 views
0

Javascriptの中で、次のような関数を作成して呼び出すことができます。コール動的スコープ機能

function test_1(){ console.log(1); } 
window['test_1']() // --> 1 

しかし、私の現在のコードがスコープさ:

(function(){ 
    function test_1(){ console.log(1); } 
    window['test_1']() // --> not a function 
})(); 

...作る任意の作成機能をウィンドウレベルにバインドされず、特定のスコープレベルにバインドされます。

スコープ内で関数を作成し、その関数を動的に呼び出す方法はありますか?

は*動的で私が動的に可変の文字列などウィンドウ[「テスト_」+インデックス()を変化させることができることを意味します。

+1

'window.test_1 = function(){}' – Rayon

+0

あなたの問題は、グローバルvsローカルスコープのためです。 – epascarello

+0

2番目のコードスニペットに表示されているようなスコープ機能の全ポイントは、使用可能なスコープを制限することです。それらをグローバルに利用できるようにするには、それらをスコープしないでください。それらをグローバルに利用できないようにするには、正しいスコープからアクセスしてください。あなたが求める組み合わせは不可能であり、実際には意味をなさない。 – ArneHugo

答えて

1

グローバル変数はwindowオブジェクトのプロパティになります。

グローバル変数以外の変数は、自動的にオブジェクトのプロパティにはなりません。

これはできません。


関数を明示的にオブジェクトのプロパティにすることを検討してください。

(function(){ 
    var functions = {}; 
    functions.test_1 = function test_1(){ console.log(1); }; 
    functions['test_1'](); 
})(); 
+3

私はあなたが二重引用符を検索しなかったのに驚いています – epascarello

-1

あなただけの名前(ウィンドウを使用しない)ことによってそれを呼び出す範囲内からスコープ機能を呼び出すために:あなたはそれをエクスポートする必要がスコープ外からスコープ関数を呼び出すには

(function(){ 
    function test_1(){ console.log(1); } 
    test_1(); 
})(); 

var scope = (function(){ 
    function test_1(){ console.log(1); } 
    return { 
     test_1: test_1 
    }; 
})(); 

scope.test_1(); 
+0

あなたは質問の最後の二つの段落を読み返すべきです。あなたの答えはその点を逃している。 – Quentin

+0

私の2番目の例では、動的ルックアップが可能です。 'scope ['test _' + x]();' –