关于变量提升的问题 财富值15

2016-09-26 15:35发布

var foo = 1; function bar () {     if (!foo) {         var foo = 10;     }     console.log(foo); } bar(); var foo = 1;

为什么if里面的变量foo会提升到bar的顶端?if里面不是一个作用域吗?

付费偷看设置
发送
6条回答
wu102030 - 这个人很懒,什么都没留下
1楼 · 2016-09-26 15:45.采纳回答

function 制造的作用域

全局作用域

并不是 if 里面的变量导致的问题,而是函数外第 2 个 foo 变量提升导致覆盖第 1 个 foo,因为值不会提升,故值为 undefined。然后再调用 bar 函数,此时 if 中的判断 !undefined 为 true。

js里只有函数是作用域,没有块级作用域。

这么说吧. javascript只有三种作用域:

with 制造的作用域