为啥我的 JavaScript 没有提升函数?

Posted

技术标签:

【中文标题】为啥我的 JavaScript 没有提升函数?【英文标题】:Why is my JavaScript not hoisting functions?为什么我的 JavaScript 没有提升函数? 【发布时间】:2018-03-10 21:12:45 【问题描述】:

我和几个朋友正在用 javascript 制作一个游戏,它变得很长,目前有 2942 行。不久前,我注意到 JavaScript 没有正确提升我的函数。我已经在 Firefox、Chrome 和 Safari 中对此进行了测试,这三种情况都是如此。有谁知道如何解决这个问题?

【问题讨论】:

毫无疑问,编译器正在正确处理代码。这个问题无法回答。 【参考方案1】:

您可能在所有引擎中都发现了一个错误。您应该将该错误报告给引擎开发人员。或者,您可以提供一些代码供我们查看,正如here 所描述的那样,我相信您已经看过但可能已经忘记了。摘录:

...如果您的问题与您编写的代码有关,您应该包含一些。但不要只是复制整个程序! ...它可能包含许多不相关的细节,读者在尝试重现问题时需要忽略这些细节。

或者,您可以使用一种鲜为人知的技术,称为“调试”。我建议你学习它。通常,“调试”技术是使用称为“调试器”的工具完成的。例如,调试器允许您观察代码执行、检查变量以及在“断点”处停止代码。

但您也可以使用简单的“分而治之”的方法。如果您的 2,942 行程序不起作用,则将其缩减为一半,即 1,471 行。如果您仍然看到错误或意外行为,那么您知道问题不是在您删除的 1,471 行中,而是在您保留的 1,471 行中。然后继续这样做,直到找到问题为止。如果您将代码简化为一个小示例,但仍然无法按照您认为的方式工作,那么您可以在此时发布到 Stack Overflow。

一种相关的技术是增量回溯。如果您的代码正在运行,但突然停止,请删除您最近添加的内容。如果您使用像git 这样的版本控制系统,这很容易——您就是这样,对吧?通常,您可以在最近添加或最近更改的代码中很容易地找到问题的根源。

看,问题是,Stack Overflow 并非旨在成为“我们免费为您调试代码”服务。它旨在成为有关编程的有趣问答的存储库。你的问题不有趣。它甚至不是很好的格式。它甚至无法回答,因为你没有给我们任何信息。即使您发布了所有 2,942 行,这仍然是一个可怕的问题,因为谁会通过您的数千行来寻找错误?如果有人这样做并发现了您的错误,那么该答案将如何帮助 SO 的未来访问者,这是 Stack Overflow 存在的最终原因?

也许更重要的是,当您试图让您的程序正常运行时,要求 SO 上的人员查找您的错误非常缓慢且效率低下。您可能需要等待数小时甚至数天,而使用正确的调试技术,您可以在五分钟内解决您自己的问题。请记住,如果您正在找工作,而面试问题是关于您使用哪种调试技术,那么如果您的答案是您的主要调试技术是向 SO 发布代码墙,那么没有潜在雇主会雇用您并希望其他人发现您的错误。

【讨论】:

【参考方案2】:

如果没有代码中没有被提升的函数示例,很难知道为什么 javascript 没有提升。 Javascript 只提升函数声明,而不是表达式。

声明:

function myFunction() 
  // I get hoisted!

表达式:

let myFunction = function () 
  // I don't get hoisted!

【讨论】:

以上是关于为啥我的 JavaScript 没有提升函数?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 javascript 调用回发并且我没有错误?

为啥我的 Javascript 函数只能工作几次?

为啥我的 ja.lproj 不显示日语?

为啥我的 javascript 箭头函数在 Edge/IE 中不起作用?

为啥我的复选框更改事件没有被触发?

为啥 Javascript 无法识别我的构造函数?