Javascript Scope undefined

Javascript Scope undefined

本文关键字:undefined Scope Javascript      更新时间:2023-09-26

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

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

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

JS正在使用函数作用域

因此,baz不是在该 IIFE 之外定义的。

change this to :
(function() {
 window.baz = 1;     <----
var bim = function() {
    console.log( baz );
};
bar = function() {
    console.log( baz );
};
})();

它会起作用。

附言

这就是jQuery将$/jQuery附加到窗口的方式(当他们完成bla bla.时)。(只是窗口.$位于其最后一行)。

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

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

如果将变量链接到 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 //

也许你处于"严格模式"?在Chrome控制台中,一切都是正确的。"baz"的调用写1

JSFIDDLE 检查jsfiddle.net/Yjq2v/