
变量提升(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);
}
})();
胜象大百科欢迎关注,更多分享不错过








