簡體   English   中英

Javascript 中的函數聲明形式`function fx () {}` 是 LHS 還是 RHS 查找?

[英]Whether function declaration in Javascript of form `function fx () {}` a LHS or RHS lookup?

我正在閱讀 Kyle Simpson撰寫You don't know JSScopes and Closure標題,特別是這個話題Compiler Speak 本節是關於引擎使用的查找類型。 現在我了解了本節中給出的 LHS 或 RHS 查找是什么。

我的問題是注釋說function fx(a) {..形式的函數聲明不是 LHS 查找。 有相同的解釋,但我無法理解。 這是整個筆記

您可能想將函數聲明 function foo(a) {...概念化為普通的變量聲明和賦值,例如var foofoo = function(a){... 這樣做時,很容易將此函數聲明視為涉及 LHS 查找。 然而,微妙但重要的區別在於,Compiler 在代碼生成期間處理聲明和值定義,因此當 Engine 執行代碼時,無需處理將函數值“分配”給foo 因此,以我們在此討論的方式將函數聲明視為 LHS 查找賦值實際上並不合適。

任何形式的澄清都會有所幫助。 即使在 LHS 和 RHS 查找上。

“查找”主題與表達式求值有關 一個函數聲明語句

function someName() {
  // code
}

不是表達式。 它是一個不同的語句類型,就像return是一個不同的語句類型一樣,而whileif 在函數聲明語句中不發生表達式求值,除了隱式實例化要綁定到局部作用域中的函數名稱的新函數對象。

LHS 和 RHS 值的主題(通常,根據我的經驗,在文獻中稱為l 值r 值)很重要,但它與函數聲明無關。

我在閱讀時分享了同樣的問題。 上面 Pointy 的回答使這個概念非常清楚,我只是使用本書較新版本的引用添加更多解釋:

" function getStudentName(studentID) {

函數聲明是目標引用的特例。 您可以認為它有點像 var getStudentName = function(studentID),但這並不完全准確。 標識符 getStudentName 被聲明(在編譯時),但 = function(studentID) 部分也在編譯時處理; getStudentName 和函數之間的關聯是在作用域開始時自動設置的,而不是等待 = 賦值語句被執行。

注意:函數和變量的這種自動關聯被稱為“函數提升”,在第 5 章中有詳細介紹。

這是 GithHub 上新版本的鏈接。

暫無
暫無

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

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