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