2012-03-28 19 views
2

私はこのビットのJavaScriptを含むbbUI.jsというファイルを持っています。そのファイルの外では、 "var x = new iScroll(...)"を呼び出せるようにしたいと思いますが、現在、 "ReferenceError:変数を見つけることができません:iScroll"というエラーが表示されます。匿名関数内で宣言された関数へのアクセス?

iScrollは匿名関数内で定義され、それ自体は匿名ですが、識別子iScrollに割り当てられています。それが正確であれば、コード内の他の場所で "var x = new iScroll(...)"を呼び出すことができますか?

答えて

4

iScroll関数は、ラップされた匿名関数の範囲内にのみ存在します。別の場所で使用するには、グローバル化する必要があります。

ラップされた関数を削除するか、または匿名関数内にwindow.iScroll = iScrollを設定することで、グローバルにすることができます。

+0

+1: 'window.foo'トリックについて考えたことはありません。良いですね。 – Blender

3

コードをラップ無名関数の削除:

(function(){ // <- this 
    ... 
})();   // <- this 

を匿名関数は、グローバル変数を汚染からそのコードを防ぐため、iScrollだけその匿名関数内で定義されています。

1

この質問への回答は、実際に何を達成したいのか、自己実行機能の目的によって異なります。とにかく..ここにiScrollは自己実行機能の中にあり、あなたはそれを外のスコープで利用可能にしなければなりません。私はこれを行うために以下の2つの方法を示しました。

どちらかだけvarキーワード

(function(){ 
iScroll = function (el, options) { 
     var that = this, 
      doc = document, 
      i; 

     this.show = function(){ 
      alert("hello world"); 
     } 
    }; 

})(); 

を除去することによって、または外部変数iScrollを追加し、機能を返すことによって、それがグローバルにします。

var iScroll = (function(){ 
     return function (el, options) { 
      var that = this, 
       doc = document, 
       i; 

      this.show = function(){ 
       alert("hello world"); 
      } 
     }; 
})(); 

var iscroll = new iScroll(); 
iscroll.show(); 
1

は別のオプションは、次の可能性をテストするには:

var iScroll = (function(){ 

    var iScroll = function (el, options) { 
    }; 

    return iScroll; // <-- add this line 

})(); 
関連する問題