求问一道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
错误以上代码就表现为这种行为~~
你的提问已经解答了啊,以下代码等价于你提问的代码
第一个等价于
`
`
为什么第二个不提升。第一个提升?
因为js是函数级作用域。
函数块内的所有变量都会把声明提到函数块内部的顶端。
var v=3
会提升var v
所以alert v 会undefined
而函数块内没有新变量声明。alert找不到v,就会往上翻。翻到函数块外面
然后发现v的值。输出hello
看懂了赞我