什么是JavaScript的变量提升?

 

变量提升(hoisting):函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部

Script 初始化不会提升

只有声明的变量会提升,初始化的不会。

例子:

var x = 5; // 初始化 x
var y = 7; // 初始化 y
elem = document.getElementById("demo"); 
elem.inner = x + " " + y; // 显示 x:5和 y:7

y发生了初始化:

elem = document.getElementById("demo"); // 查找元素 
elem.innerHTML = x + " " + y; // 显示 x:5 和 y:undefined
var y = 7;

立即调用函数,输出的结果分别是?

一、先使用后初始化

var name = 'Tom';
(function() {
 if (typeof name == 'undefined') {
 var name = 'Jack';
 console.log('Goodbye ' + name);
 } else {
 console.log('Hello ' + name);
 }
})();

 


 

二、作用域发生了变化

var name = 'Tom';
(function(name) {
if (typeof name == 'undefined') {
 var name = 'Jack';
 console.log('Goodbye ' + name);
 } else {
 console.log('Hello ' + name);
 }
})(name);

 


 

三、let 不允许变量提升

var name = 'Tom';
(function() {
if (typeof name == 'undefined') {
 let name = 'Jack';
 console.log('Goodbye ' + name);
 } else {
 console.log('Hello ' + name);
 }
})();

 


 

欢迎关注,更多分享不错过

胜象大百科