2016-11-06 2 views
-3

すぐに呼び出される関数式の中に関数があり、それをレキシカルスコープなしでグローバルにアクセスできるようにしたい。Javascript:グローバルコードからのローカル関数へのアクセス

どのように私は、「アプリケーション」と呼ばれる名前空間を通じて、この「プライベート」機能にアクセスすることができますか?

indew.html:

<html> 
     <head> 
      <meta charset="utf-8"> 
      <title>Test</title> 
      <script src="filtering.js"></script> 

     </head> 
     <body> 
      <article> 
       <p> 
        Computer graphics is widespread today. Computer imagery is found on televi 
        surfaces, illumination sources, and so forth, perhaps with a dynamic (time) component".[3] 
       </p> 
      </article> 
     <section id="result"></section> 

     <script> 
      App.showOccurenceFiltering(); // here is my wrong call 
     </script> 
    </body> 
</html> 

JSスクリプト: enter image description here

:だから私はショーのようなミスコールキャプチャのエラーを得た

var App = (function() { 
function showOccurenceFiltering() { 
    "use strict"; 
    var filteredWordsArray = filtering(), 
     resultView = "<ol>"; 
    for (var i = 0; i < filteredWordsArray.length; i++) { 
     var partWord = filteredWordsArray[i].substring(0, filteredWordsArray[i].indexOf(" ")), // de 0 jusqua l espace : la partie mot 
      partNumber = filteredWordsArray[i].substring(filteredWordsArray[i].indexOf(" ") + 1); // de l'espace à la fin : la partie number 
     resultView += "<li>" + partWord + " (" + partNumber + ")</li>"; 
    } 
    resultView += "</ol>"; 
    document.getElementById('result').innerHTML = resultView; 
} 
}(App)); 

問題をどう解決すればいいですか? ??

答えて

3

この機能をグローバルスコープに公開する必要があります。

(function() { 
    function showOccurenceFiltering() { 
    "use strict"; 
    var filteredWordsArray = filtering(), 
     resultView = "<ol>"; 
    for (var i = 0; i < filteredWordsArray.length; i++) { 
     var partWord = filteredWordsArray[i].substring(0, filteredWordsArray[i].indexOf(" ")), // de 0 jusqua l espace : la partie mot 
      partNumber = filteredWordsArray[i].substring(filteredWordsArray[i].indexOf(" ") + 1); // de l'espace à la fin : la partie number 
     resultView += "<li>" + partWord + " (" + partNumber + ")</li>"; 
    } 
    resultView += "</ol>"; 
    document.getElementById('result').innerHTML = resultView; 
    } 

    // Prepare a "dummy" object 
    var obj = {}; 

    // Attach the private function to this object 
    obj.showOccurenceFiltering = showOccurenceFiltering; 

    // Attach the dummy object to the global scope in a controlled namespace: 
    window.App = obj; 

}()); 

次に、あなたはこのように機能にアクセスすることができます:

App.showOccurenceFiltering(); 
0

あなたは次のことを行うことができます:

var App = (function(){ 
var obj = {}; 
obj.showOccurenceFiltering = function() { 
    "use strict"; 
    var filteredWordsArray = filtering(), 
     resultView = "<ol>"; 
    for (var i = 0; i < filteredWordsArray.length; i++) { 
     var partWord = filteredWordsArray[i].substring(0, filteredWordsArray[i].indexOf(" ")), // de 0 jusqua l espace : la partie mot 
      partNumber = filteredWordsArray[i].substring(filteredWordsArray[i].indexOf(" ") + 1); // de l'espace à la fin : la partie number 
     resultView += "<li>" + partWord + " (" + partNumber + ")</li>"; 
    } 
    resultView += "</ol>"; 
    document.getElementById('result').innerHTML = resultView; 
} 
return obj; 
}()); 
0

あなたApp変数あなたはこのように、名前空間でこれを行うことができますすぐに呼び出される関数式が値を返さないためundefinedまま。

その代わりに、次のように、オブジェクトリテラルとしてAppを定義します。

var App = { 
    showOccurenceFiltering: function() { 
     "use strict"; 
     var filteredWordsArray = filtering(), 
      resultView = "<ol>"; 
     for (var i = 0; i < filteredWordsArray.length; i++) { 
      var partWord = filteredWordsArray[i].substring(0, filteredWordsArray[i].indexOf(" ")), // de 0 jusqua l espace : la partie mot 
       partNumber = filteredWordsArray[i].substring(filteredWordsArray[i].indexOf(" ") + 1); // de l'espace à la fin : la partie number 
      resultView += "<li>" + partWord + " (" + partNumber + ")</li>"; 
     } 
     resultView += "</ol>"; 
     document.getElementById('result').innerHTML = resultView; 
    } 
}; 

今、あなたの呼び出しが有効になります。

関連する問題