Javascript范围未定义

时间:2013-11-05 07:24:49

标签: javascript scope

关于javascript范围的jquery网站的在线文档我有问题。有代码;

(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)未定义。因为我认为范围是一样的。我错过了什么吗?

3 个答案:

答案 0 :(得分:5)

陷阱是IIFE - 立即调用的函数表达式,它们创建自己的范围。

JS正在使用功能范围

所以baz 不是在IIFE之外定义。

change this to :

(function() {

 window.baz = 1;     <----

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

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

})();

它会起作用。

P.S。

这是jQuery如何附加(当他们完成bla bla ..)$ / jQuery到窗口。 (只有窗口。$位于最后一行)。

答案 1 :(得分:0)

可能是你处于&#34;严格模式&#34; ?在Chrome控制台中一切都是正确的。打电话给&#34; baz&#34;写1。

jsfiddle检查jsfiddle.net/Yjq2v/

答案 2 :(得分:0)

  

我不明白的是,即使定义了baz,为什么console.log(baz)未定义

它是未定义的,因为它的范围被限制(私有)到IIFE(立即调用的函数表达式)范围。

如果将变量链接到Window对象,则可以全局访问它。

<强> DEMO

(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 //