4

javascript スコープに関する jquery の Web サイトのオンライン ドキュメントに問題があります。コードがあります。

(function() {

var baz = 1;

var bim = function() {
    console.log( baz );
};

bar = function() {
    console.log( baz );
};

})();

そして、次のように述べています。

console.log( baz ); // baz is not defined outside of the function

私が理解していないのbazは、定義されているにもかかわらず、なぜconsole.log(baz)未定義なのかということです。範囲は同じだと思うからです。私は何か見落としてますか?

4

3 に答える 3

5

トラップは、IIFE独自のスコープを作成する即時に呼び出される関数式です。

JS は関数スコープを使用しています

Sobazはその IIFE の外では定義されていません。

change this to :

(function() {

 window.baz = 1;     <----

var bim = function() {
    console.log( baz );
};

bar = function() {
    console.log( baz );
};

})();

そして、それはうまくいきます。

ps

これは、jQuery が (bla bla.. で終了したときに) $ /jQuery をウィンドウにアタッチする方法です。( window.$ が最後の行にあることのみ)。

于 2013-11-05T07:28:36.763 に答える
0

「厳密モード」になっている可能性がありますか?Chrome コンソールでは、すべてが正しいです。「baz」 write 1 の呼び出し。

チェックするjsfiddlejsfiddle.net/Yjq2v/

于 2013-11-05T07:29:55.620 に答える
0

私が理解していないのは、 baz が定義されているにもかかわらず、なぜ console.log(baz) が定義されていないのかということです

範囲がIIFE (Immediately Invoked Function Expression) スコープに制限されている ( private )原因は未定義です。

変数を Window オブジェクトにチェーンすると、グローバルにアクセスできるようになります。

デモ

(function() {

  window.baz = 1; // Global
  var pub    = 2; // private

  var bim = function() {
    console.log( baz );
  };

  var bar = function() {
    console.log( pub ); 
  };

  bim(); // 1 //////////
  bar(); // 2 //////////

})(); 


console.log( baz ); // 1 //////////
console.log( pub ); // Ref.Error //
于 2013-11-05T07:33:02.530 に答える