Javascript:为什么if语句不评估函数中的提升变量

b科技

AFAIK,将变量声明悬挂在定义它们的上下文中,但是,在下面的代码中,取自此处

var foo = 1;
function bar() {
    if (!foo) {
        var foo = 10;
    }
    alert(foo);
}
bar();

if(!foo)评估true但为什么呢?我的意思是说在foo的上下文中进行评估之前var foo,此语句已存在,因此应解析为,进一步解析为意味着if块不应执行,但评估为true,因此if块中的代码将被执行并发出警报10var foo = 10if(!foo)if(!foo)if(!true)if(false)if (!foo)

有人可以告诉我为什么,并且重要的是如何评估if条件吗?

费利佩·萨比诺(Felipe Sabino)

欢迎使用Java语言“吊装”,它令人讨厌的功能是可以进行看起来好像不是正在完成的事情:)

因此,发生了什么事情,就是Java没有if子句的块作用域,它以一种怪异的方式对此进行了补偿。我的意思是,当你这样做

function bar() {
    if (!foo) {
        var foo = 10;
    }
    alert(foo);
}

它实际上被翻译为:

function bar() {
    var foo;
    if (!foo) {
      foo = 10;
    }
    alert(foo);
}

在执行之前,使所有变量都在使用前声明。基于此,foo在函数外部声明undefined不是在声明全局值。因此,当您致电时if (!foo),它将!undefined一直进行评估true

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的VBA函数不评估基于IF语句返回HYPERLINK的源单元格

来自分类Dev

JavaScript提升函数与函数变量

来自分类Dev

JavaScript中的变量提升

来自分类Dev

为什么不评估Emacs lisp函数的参数?

来自分类Dev

为什么javascript void语句评估表达式?

来自分类Dev

如果javascript中的函数不返回任何内容,为什么?

来自分类Dev

为什么我在Python中的if语句评估为False?

来自分类Dev

Javascript为什么在IIFE中包装变量或构造函数?

来自分类Dev

为什么我在If语句中设置的变量不能在javascript中的if语句之外起作用?

来自分类Dev

为什么$ compile不评估ngRepeat创建的指令中的范围

来自分类Dev

为什么我的if语句应该在什么时候不评估为假?

来自分类Dev

为什么我的JavaScript提升的局部变量返回未定义,而提升的全局变量返回空白?

来自分类Dev

Javascript中的变量范围(提升)

来自分类Dev

为什么我的javaScript函数不触发?

来自分类Dev

为什么函数 Javascript 不执行?

来自分类Dev

为什么Windows Experience Index评估需要提升?

来自分类Dev

为什么函数声明不是语句,而变量声明是

来自分类Dev

在构造函数中初始化变量后进行验证:为什么不这样做呢?

来自分类Dev

为什么我的Python函数中的坐标变量不增加和减少?

来自分类Dev

为什么需要在对象中的函数中的if语句中的“ this”内部而不是外部?的JavaScript

来自分类Dev

为什么可以从javascript中的函数外部访问匿名函数中的私有变量?

来自分类Dev

Javascript无法理解技巧变量“提升”:为什么它是NaN值?

来自分类Dev

为什么不执行语句

来自分类Dev

为什么我的Javascript setInterval函数中的else语句不起作用?

来自分类Dev

为什么Javascript比变量先加载到函数“作为参数的函数”中?

来自分类Dev

为什么程序不执行main中的打印语句?

来自分类Dev

为什么程序不执行main中的打印语句?

来自分类Dev

为什么在单独的线程中修改时我的变量没有改变?C++/提升

来自分类Dev

睡在javascript中,为什么不循环?

Related 相关文章

  1. 1

    为什么我的VBA函数不评估基于IF语句返回HYPERLINK的源单元格

  2. 2

    JavaScript提升函数与函数变量

  3. 3

    JavaScript中的变量提升

  4. 4

    为什么不评估Emacs lisp函数的参数?

  5. 5

    为什么javascript void语句评估表达式?

  6. 6

    如果javascript中的函数不返回任何内容,为什么?

  7. 7

    为什么我在Python中的if语句评估为False?

  8. 8

    Javascript为什么在IIFE中包装变量或构造函数?

  9. 9

    为什么我在If语句中设置的变量不能在javascript中的if语句之外起作用?

  10. 10

    为什么$ compile不评估ngRepeat创建的指令中的范围

  11. 11

    为什么我的if语句应该在什么时候不评估为假?

  12. 12

    为什么我的JavaScript提升的局部变量返回未定义,而提升的全局变量返回空白?

  13. 13

    Javascript中的变量范围(提升)

  14. 14

    为什么我的javaScript函数不触发?

  15. 15

    为什么函数 Javascript 不执行?

  16. 16

    为什么Windows Experience Index评估需要提升?

  17. 17

    为什么函数声明不是语句,而变量声明是

  18. 18

    在构造函数中初始化变量后进行验证:为什么不这样做呢?

  19. 19

    为什么我的Python函数中的坐标变量不增加和减少?

  20. 20

    为什么需要在对象中的函数中的if语句中的“ this”内部而不是外部?的JavaScript

  21. 21

    为什么可以从javascript中的函数外部访问匿名函数中的私有变量?

  22. 22

    Javascript无法理解技巧变量“提升”:为什么它是NaN值?

  23. 23

    为什么不执行语句

  24. 24

    为什么我的Javascript setInterval函数中的else语句不起作用?

  25. 25

    为什么Javascript比变量先加载到函数“作为参数的函数”中?

  26. 26

    为什么程序不执行main中的打印语句?

  27. 27

    为什么程序不执行main中的打印语句?

  28. 28

    为什么在单独的线程中修改时我的变量没有改变?C++/提升

  29. 29

    睡在javascript中,为什么不循环?

热门标签

归档