javascript提升全局变量和函数

时间:2018-07-09 23:34:12

标签: javascript hoisting

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

这是我的代码。

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

1 个答案:

答案 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被重新分配给该字符串。普通的分配不会被挂起-只有变量名是