我遇到了以下代码:
var myVar = 'foo';
(function() {
console.log('Original value was: ' + myVar);
var myVar = 'bar';
console.log('New value is: ' + myVar);
})();
问题:
myVar
之前位居榜首?
1a。如果是,是否在声明全局myVar
之前执行?undefined
,然后获得bar
。 IIFE中幕后执行的顺序是什么?答案 0 :(得分:2)
var myVar
会提升到功能范围的顶部,但不会分配。以下是等效的:
(function(){
var myVar;
console.log('Original value was: '+ myVar);
myVar = 'bar';
console.log('New value is: ' + myVar);
})();
答案 1 :(得分:1)
帕特里克·罗伯茨(Patrick Roberts)的回答很好,但是我想澄清一点,这里没有特定于IIFE的东西,所有功能都相同,无论它们是否立即被调用
var myVar = 'foo';
// f1 : creates a variable inside the scope with the same name
function f1 () {
console.log(myVar); // Logs undefined
var myVar = 'hi';
}
// f2 is the same as f1
function f2 () {
var myVar;
console.log(myVar); // Logs undefined
myVar = 'hi';
}
// f3 declares before logging
function f3 () {
var myVar = 'hullo';
console.log(myVar); // Logs the inner value of the variable
}
function logOuterVar () {
console.log(myVar); // Logs the global var
}
f1();
f2();
f3();
logOuterVar();