求问一道js的题
var name = 'World!';
(function () {
if (typeof name === 'undefined') {
var name = 'Jack';
console.log('Goodbye ' + name);
} else {
console.log('Hello ' + name);
}
})();
运行结果为什么是“Goodbye Jack”,即name是undefined
而
var name = 'World!';
(function () {
console.log(name)
})();
却输出了name的值“World!”
明白了没注意if中的var name会进行变量声明提升,多谢大家了
变量声明提升的作用
在一个函数体内声明的变量,JS解析器都会将其移动到函数体的顶部
等价为==>
执行的时候有个变量查找的过程,如果在当前函数体内没找到,就会到定义的函数体的外层函数中去寻找,一直向上到全局对象中寻找,还是找不到就会报
TypeError
错误以上代码就表现为这种行为~~