javascript - js变量提升是提升到具体哪一行了?
伊谢尔伦
伊谢尔伦 2017-04-11 10:02:35
[JavaScript讨论组]
   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),它提升到哪一行了?
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(5)
阿神

申明会被提升,赋值语句还是留在原地不会被提升,如果是在函数作用域会提升到函数体顶部,在全局作用域的话就是全局空间顶部,就你这里的代码,提升到第2、3行中间~

PHP中文网

应该提升到作用域顶部吧。。而且好像只是提升声明,不提升赋值,也就是相当于:

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

如果有误请指正。。。

大家讲道理

变量提升是提升到当前作用域的顶部,你这段代码不太适合说变量提升,因为本身还有个全局作用于和局部作用域的问题。我写个单纯的变量提升的例子:

function bar(){
    console.log(foo); // -> undefined
    var foo = 10;
    console.log(foo); // -> 10
}

从执行结果可以看出来,发生了变量提升。具体js的执行顺序:

function bar(){
    var foo; //这就是变量提升了,执行的时候js会先声明foo变量,但不赋值
    console.log(foo); // -> undefined,控制台输出,所以这个地方是undefined
    foo = 10; //给foo赋值为10,并不是在这句代码才声明的foo变量
    console.log(foo); // -> 10,foo已经在上一句赋值了,输出10
}

做个对比,

function bar(){
    console.log(foo); // -> Uncaught ReferenceError: foo is not defined
}

报错了,foo变量未定义。

以上代码结果由chrome控制台得到

天蓬老师

https://segmentfault.com/a/11...
你可以看看这个,讲的很详细。
我能说的就是,看情况。还有,多谷歌,这种问题不需要提问的,随便一搜就有很多了。

PHPz

JS 中if 的{ } 不存在 块级作用域的 , 因此 变量申明会被提示。 变量的 提升, 提示到 当前作用域的 顶部 , 如 函数中, 内部变量,与形参 重名 的话, 会造成 第二次以及 后面的申明 无效。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号