Javascript作用域未定义
我对jquery网站关于javascript范围的在线文档有问题,有代码Javascript作用域未定义,javascript,scope,Javascript,Scope,我对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 我不明白的是,即
(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
不是在该生命之外定义的
change this to :
(function() {
window.baz = 1; <----
var bim = function() {
console.log( baz );
};
bar = function() {
console.log( baz );
};
})();
将此更改为:
(功能(){
window.baz=1;可能是您处于“严格模式”?在Chrome控制台中一切正常。调用“baz”写入1
jsfiddle检查jsfiddle.net/Yjq2v/
我不明白的是,即使定义了baz,为什么console.log(baz)是未定义的
它是未定义的,因为它的范围被限制(私有)到IIFE(立即调用的函数表达式)范围
如果将变量链接到窗口对象,则可以全局访问它
(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 //
您可以在IIFE(立即调用的函数表达式)中看看这个问题吗变量作用域是私有的,只能在函数作用域内使用。请尝试使用window.baz=1;
我不认为真正的问题是如何使变量在函数作用域之外可访问..使用window.baz只会污染全局作用域..这个示例应该真正意味着,尽管您不能使用console.log在IIFE之外,您可以调用bar,它可以引用baz,因为bar也在同一范围内定义。任何用var
声明的变量只能在其定义的函数内访问。他正在运行console.log(baz)
在IIFE范围之外谢谢我错过了立即调用的函数表达式。我现在明白了非常感谢