问题标签 [hoisting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Javascript - 提升优先级
在提升中,变量优先于函数定义还是相反?请看下面的代码:
javascript - 为什么我的 JavaScript 提升的局部变量返回未定义但提升的全局变量返回空白?
作为学习 JavaScript 的一部分,我尝试编写代码来展示我正在学习的概念;今天我正在学习提升变量。这是我写的代码:
我期望得到以下结果:
但是,在 WriteCodeOnline.com 和另一个沙箱中测试我的代码时,第一个 console.log 显示A: My name is
. 我正在使用 Chrome 浏览器,如果这有什么不同的话。
所以,我的问题是,为什么函数中提升的局部变量返回未定义,而提升的全局变量返回空白?
javascript - 变量未提升
在 Javascript 中,变量被提升到声明它们的范围的顶部。
但是在下面的代码中,变量似乎myvar
没有被提升。
上面的输出是:
我预计第一行会说“字符串”,因为myvar
应该被提升到它上面。
为什么不是这样?
javascript - Javascript 更新全局变量和提升
我有一个 javascript 函数,它使用 ajax 函数发布到 php 脚本和一个变量,用于确定结果是真还是假。在 php 中,我通常会将函数分配给一个变量,例如:
我无法使用 javascript 完成此操作。相反,如果我将函数分配给变量,我会得到一个 [object object] 返回。作为一种廉价的替代方案,我正在尝试使用全局变量来编写任何错误:
在此示例中,尽管 ajax 函数将其更新为 true,但 'error' 仍返回为 false。我已经阅读了有关 javascript 提升的所有内容,但还没有找到解决方案。有没有办法解决?我的问题完全源于 ajax 函数,我也尝试直接访问该函数以返回任何变量(就像我在 PHP 中很容易做到的那样),但我没有运气!
附带说明一下,我发现我可以在 ajax 函数中访问“错误”(返回为 false)但无法更改它,这很有趣。
javascript - 没有函数的 JavaScript 变量提升
JavaScript文档状态:
JavaScript 中变量的另一个不同寻常之处在于,您可以引用稍后声明的变量,而不会出现异常。这个概念被称为提升;JavaScript 中的变量在某种意义上被“提升”或提升到函数或语句的顶部。但是,尚未初始化的变量将返回未定义的值。
现在在我的(实际上它是来自 W3Schools 关于同一主题的代码片段)代码中,我没有使用函数:
结果alert()
是 5。为什么不是undefined
。据我了解,这条线var x
应该被提升到顶部并且alert()
应该显示undefined
.
我从: http ://code.tutsplus.com/tutorials/javascript-hoisting-explained--net-15092阅读了更多关于此的内容
我没有得到什么?
javascript - JavaScript 中的提升顺序
我想确切地知道上述代码在提升时的顺序。
理论 1:var
s 和s之间的顺序function
保持原样:
理论 2: var
s 在function
s 之前:
理论 3: function
s 在var
s 之前:
哪个理论是正确的?
javascript - Javascript - 事情是怎么坏的?
请参考小提琴 - http://jsfiddle.net/s8a7m1hk/
上面的 log 语句记录了不同的值,唯一的区别是变量在一个地方被赋值,而不是在另一个地方。
你能告诉我这两个代码片段是如何分解的,考虑到提升、关闭或任何可以应用的东西。
javascript - JS全局/函数作用域理解
我目前正在注册一个 Javascript 课程,我需要一些帮助来了解作用域的工作原理。我们已经讨论过全局范围、函数范围、课堂提升等主题,但我正在努力将它们放在一起。所以我特别关注的问题包括弄清楚以下代码输出了什么:
现在我们的解决方案是代码将打印出 undefined 8 8 9 10 1
我需要一些帮助来了解这到底是如何发生的。具体来说,我不明白 b 的值如何根据我们正在查看的语句而变化。如果有人可以为我一步一步地完成整个过程,将不胜感激。谢谢!
javascript - ES6 模块导入是否被提升?
我知道在新的 ES6 模块语法中,JavaScript 引擎不必评估代码即可了解所有导入/导出,它只会解析它并“知道”要加载的内容。
这听起来像吊装。ES6 模块是否被吊起?如果是这样,它们会在运行代码之前全部加载吗?
这段代码可能吗?
javascript - 在这个 JS 示例中变量提升是如何工作的:if(true){...}
我遇到了这个关于功能范围与块范围的示例代码片段,但我不确定它是如何工作的:
最初,我认为条件是检查声明的变量 x 的值是否为真,并且变量提升的 b/c 可以将条件缩写为 'if(true)' 而不是 'if(x ==真)'。
但是,如果您更改 x 的值以使 x=false,则条件中的代码块仍会执行,并且会触发两个控制台日志,其中 x 的值为“false”。它不应该只执行条件语句之外的控制台日志吗?
如果 x=true,并且条件更改为 'if(false)',则仅执行条件之外的控制台日志,但是.. x 的值未定义。如果变量具有功能范围并且被提升,那么外部控制台日志是否应该执行并且 x=false 的值?
谢谢!