问题标签 [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.

0 投票
2 回答
1385 浏览

javascript - Javascript - 提升优先级

在提升中,变量优先于函数定义还是相反?请看下面的代码:

0 投票
1 回答
268 浏览

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

作为学习 JavaScript 的一部分,我尝试编写代码来展示我正在学习的概念;今天我正在学习提升变量。这是我写的代码:

我期望得到以下结果:

但是,在 WriteCodeOnline.com 和另一个沙箱中测试我的代码时,第一个 console.log 显示A: My name is. 我正在使用 Chrome 浏览器,如果这有什么不同的话。

所以,我的问题是,为什么函数中提升的局部变量返回未定义,而提升的全局变量返回空白?

0 投票
2 回答
148 浏览

javascript - 变量未提升

在 Javascript 中,变量被提升到声明它们的范围的顶部。
但是在下面的代码中,变量似乎myvar没有被提升。

上面的输出是:

我预计第一行会说“字符串”,因为myvar应该被提升到它上面。

为什么不是这样?

0 投票
0 回答
65 浏览

javascript - Javascript 更新全局变量和提升

我有一个 javascript 函数,它使用 ajax 函数发布到 php 脚本和一个变量,用于确定结果是真还是假。在 php 中,我通常会将函数分配给一个变量,例如:

我无法使用 javascript 完成此操作。相反,如果我将函数分配给变量,我会得到一个 [object object] 返回。作为一种廉价的替代方案,我正在尝试使用全局变量来编写任何错误:

在此示例中,尽管 ajax 函数将其更新为 true,但 'error' 仍返回为 false。我已经阅读了有关 javascript 提升的所有内容,但还没有找到解决方案。有没有办法解决?我的问题完全源于 ajax 函数,我也尝试直接访问该函数以返回任何变量(就像我在 PHP 中很容易做到的那样),但我没有运气!

附带说明一下,我发现我可以在 ajax 函数中访问“错误”(返回为 false)但无法更改它,这很有趣。

0 投票
1 回答
71 浏览

javascript - 没有函数的 JavaScript 变量提升

JavaScript文档状态:

JavaScript 中变量的另一个不同寻常之处在于,您可以引用稍后声明的变量,而不会出现异常。这个概念被称为提升;JavaScript 中的变量在某种意义上被“提升”或提升到函数或语句的顶部。但是,尚未初始化的变量将返回未定义的值。

现在在我的(实际上它是来自 W3Schools 关于同一主题的代码片段)代码中,我没有使用函数:

结果alert()是 5。为什么不是undefined。据我了解,这条线var x应该被提升到顶部并且alert()应该显示undefined

我从: http ://code.tutsplus.com/tutorials/javascript-hoisting-explained--net-15092阅读了更多关于此的内容

我没有得到什么?

0 投票
2 回答
3324 浏览

javascript - JavaScript 中的提升顺序

我想确切地知道上述代码在提升时的顺序。

理论 1:var s 和s之间的顺序function保持原样:

理论 2: var s 在functions 之前:

理论 3: function s 在vars 之前:

哪个理论是正确的?

0 投票
2 回答
70 浏览

javascript - Javascript - 事情是怎么坏的?

请参考小提琴 - http://jsfiddle.net/s8a7m1hk/

上面的 log 语句记录了不同的值,唯一的区别是变量在一个地方被赋值,而不是在另一个地方。

你能告诉我这两个代码片段是如何分解的,考虑到提升、关闭或任何可以应用的东西。

0 投票
1 回答
69 浏览

javascript - JS全局/函数作用域理解

我目前正在注册一个 Javascript 课程,我需要一些帮助来了解作用域的工作原理。我们已经讨论过全局范围、函数范围、课堂提升等主题,但我正在努力将它们放在一起。所以我特别关注的问题包括弄清楚以下代码输出了什么:

现在我们的解决方案是代码将打印出 undefined 8 8 9 10 1

我需要一些帮助来了解这到底是如何发生的。具体来说,我不明白 b 的值如何根据我们正在查看的语句而变化。如果有人可以为我一步一步地完成整个过程,将不胜感激。谢谢!

0 投票
3 回答
19258 浏览

javascript - ES6 模块导入是否被提升?

我知道在新的 ES6 模块语法中,JavaScript 引擎不必评估代码即可了解所有导入/导出,它只会解析它并“知道”要加载的内容。

这听起来像吊装。ES6 模块是否被吊起?如果是这样,它们会在运行代码之前全部加载吗?

这段代码可能吗?

0 投票
2 回答
83 浏览

javascript - 在这个 JS 示例中变量提升是如何工作的:if(true){...}

我遇到了这个关于功能范围与块范围的示例代码片段,但我不确定它是如何工作的:

最初,我认为条件是检查声明的变量 x 的值是否为真,并且变量提升的 b/c 可以将条件缩写为 'if(true)' 而不是 'if(x ==真)'。

但是,如果您更改 x 的值以使 x=false,则条件中的代码块仍会执行,并且会触发两个控制台日志,其中 x 的值为“false”。它不应该只执行条件语句之外的控制台日志吗?

如果 x=true,并且条件更改为 'if(false)',则仅执行条件之外的控制台日志,但是.. x 的值未定义。如果变量具有功能范围并且被提升,那么外部控制台日志是否应该执行并且 x=false 的值?

谢谢!