javascript 提升全局变量和函数

javascript hoisting for global variable and function

我想知道吊装。我知道如果全局函数名称与全局变量相同,函数会覆盖变量的名称。对吗?

这是我的代码。

(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 函数。 我不知道变量和函数如何提升。 请帮忙

函数声明(比如你的 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 被重新分配给字符串。不会提升普通赋值 - 只有变量名是。