簡體   English   中英

為什么我的 JavaScript 沒有提升功能?

[英]Why is my JavaScript not hoisting functions?

我和幾個朋友正在用 JavaScript 制作一個游戲,它變得很長,目前有 2942 行。 不久前,我注意到 JavaScript 沒有正確提升我的函數。 我已經在 Firefox、Chrome 和 Safari 中對此進行了測試,這三種情況都是如此。 有誰知道如何解決這一問題?

您可能已經在所有引擎中發現了一個錯誤。 您應該向引擎開發人員報告該錯誤。 或者,你可以提供一些代碼讓我們來看看,因為清楚的描述在這里,我敢肯定,你已經看了,但可能已經忘記了。 摘抄:

...如果您的問題與您編寫的代碼有關,您應該包含一些. 但不要只是復制整個程序! ...它可能包含許多不相關的細節,讀者在嘗試重現問題時需要忽略這些細節。

或者,您可以使用一種鮮為人知的技術,稱為“調試”。 我建議你學習它。 通常,“調試”技術是使用稱為“調試器”的工具完成的。 例如,調試器允許您觀察代碼的執行情況,檢查變量,並在“斷點”處停止代碼。

但您也可以使用簡單的“分而治之”方法。 如果您的 2,942 行程序不起作用,那么歸結為它的一半,即 1,471 行。 如果您仍然看到錯誤或意外行為,那么您就知道問題不在您刪除的 1,471 行中,而是在您保留的 1,471 行中。 然后繼續這樣做,直到找到問題為止。 如果您將代碼歸結為一個小示例,但仍然無法按照您認為的方式工作,那么此時您可以發布到 Stack Overflow。

一個相關的技術是增量回溯。 如果您的代碼正在運行,但突然停止,請刪除您最近添加的內容。 如果您使用像git這樣的版本控制系統,這很容易,對吧? 通常,您可以在最近添加或最近更改的代碼中很容易地找到問題的根源。

看,問題是,Stack Overflow 並非旨在成為“我們免費為您調試代碼”的服務。 它旨在成為有關編程的有趣問答的存儲庫。 你的問題並不有趣。 它甚至不是很好的形式。 它甚至無法回答,因為你沒有給我們任何信息。 即使你發布了所有 2,942 行,這仍然是一個可怕的問題,因為誰會通過你的數千行來尋找錯誤? 如果有人這樣做了,並確定了您的錯誤,那么該答案將如何幫助未來的 SO 訪問者,這是 Stack Overflow 存在的最終原因?

也許更重要的是,當你試圖讓你的程序工作時,要求 SO 上的人找到你的錯誤是非常緩慢和低效的。 您可能需要等待數小時甚至數天,當使用正確的調試技術時,您可以在五分鍾內解決您自己的問題。 請記住,如果你正在找工作,而面試問題是關於你使用什么樣的調試技術,如果你的答案是你的主要調試技術是向 SO 發布代碼牆,那么沒有潛在的雇主會雇用你並希望其他人發現您的錯誤。

如果沒有代碼中未提升的函數示例,很難知道為什么 javascript 不會提升。 Javascript 只提升函數聲明,而不是表達式。

宣言:

function myFunction() {
  // I get hoisted!
}

表達:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM