我想知道吊装。我知道全局函数名称是否与全局变量相同,函数会覆盖变量的名称。是吗?
这是我的代码。
(function() {
console.log('console.log#1 ' + globalString); // globalString function
})();
var globalString = 'I\'m globalString variable';
(function() {
console.log('console.log#2 ' + globalString); // string
})();
function globalString() {
console.log('I\'m globalString function');
}
结果表明我像打击
console.log#1 function globalString ()
{
console.log ( 'I\'m globalString function' );
}
console.log#2 I'm globalString variable
如果函数定义覆盖变量的console.log#2,则打印globalString函数。 我不知道变量和函数如何提升。 请帮忙。
答案 0 :(得分:3)
函数声明(如您的globalString()
)被悬挂。对于解释器,您的代码如下所示:
var globalString = function globalString() {
console.log('I\'m globalString function');
};
(function() {
console.log('console.log#1 ' + globalString); // globalString function
})();
globalString = 'I\'m globalString variable';
(function() {
console.log('console.log#2 ' + globalString); // string
})();
在运行初始IIFE之前,globalString
是函数。在最初的IIFE运行之后,但在第二个IIFE运行之前,然后globalString
被重新分配给该字符串。普通的分配不会被挂起-只有变量名是