1 var foo = 1;
2 function bar() {
3 console.log(foo);
4 if (!foo) {
5 var foo = 10;
6 }
7 console.log(foo);
8 }
9 bar();
老是听说var变量提升,到底是提升到了哪个地方?如上bar函数里的foo变量(var foo = 10),它提升到哪一行了?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
申明会被提升,赋值语句还是留在原地不会被提升,如果是在函数作用域会提升到函数体顶部,在全局作用域的话就是全局空间顶部,就你这里的代码,提升到第2、3行中间~
应该提升到作用域顶部吧。。而且好像只是提升声明,不提升赋值,也就是相当于:
如果有误请指正。。。
变量提升是提升到当前作用域的顶部,你这段代码不太适合说变量提升,因为本身还有个全局作用于和局部作用域的问题。我写个单纯的变量提升的例子:
从执行结果可以看出来,发生了变量提升。具体js的执行顺序:
做个对比,
报错了,foo变量未定义。
以上代码结果由chrome控制台得到
https://segmentfault.com/a/11...
你可以看看这个,讲的很详细。
我能说的就是,看情况。还有,多谷歌,这种问题不需要提问的,随便一搜就有很多了。
JS 中if 的{ } 不存在 块级作用域的 , 因此 变量申明会被提示。 变量的 提升, 提示到 当前作用域的 顶部 , 如 函数中, 内部变量,与形参 重名 的话, 会造成 第二次以及 后面的申明 无效。