![](/img/trans.png)
[英]Node.js: accidentally omitted var declaration expose all variables via global object, bug or feature?
[英]Declaration of a VAR on Node.js
我正在學習Node.js。 我正在使用的書上有一條線,我不確定我確切地知道它是如何工作的並且正在尋找確認。
該行是:
var user = req.user = users[req.params.name];
我在Google上進行了一些研究,並且我相信這種工作方式是:
第一步將將users [request.params.name]的內容復制到req.user,然后第二步將req.user的內容復制到user。 最終用戶== users [req.params.name];
能否請您確認我做對了,否則請解釋這條線的工作方式?
謝謝
本質上就是這樣。 您所擁有的是復合作業。 賦值表達式的結果是被賦值,因此該值可以是另一個賦值表達式的右側。
但實際上在這之前還有其他事情發生:在當前上下文中定義變量user
。 這是詳細的操作順序:
輸入上下文后,變量user
的定義值為undefined
。 這發生在上下文中的任何分步代碼發生之前。
當執行游標在逐步執行代碼中到達該代碼時,則:
在變量req
上查找屬性params
。
在req.params
的結果中req.params
屬性name
。
名稱由該值定義的屬性( req.params.name
的值)是從users
變量引用的對象(大概)中檢索的。
結果值分配給req
上的user
屬性。
相同的值分配給user
變量。
(我跳過了一些簿記步驟,以免過度進行前期准備。)
重要的是要注意,在上述步驟2.4和2.5之間, 不會從req.user
屬性中讀取req.user
的值。 該值在2.3中確定,然后在2.4中使用,然后在2.5中再次使用。 也就是說, a = b = c;
是不一樣的b = c; a = b;
b = c; a = b;
。 區別在於,后者是從第二個賦值中的b
中檢索值; 在前者中,不是,只是從b = c
部分重用了。 現在,當它是一個簡單的屬性時,這種區別並不特別重要,但是,如果您使用的是屬性訪問器函數(不是Mozilla較早的JavaScript變體中的非標准類型,還是ECMAScript5的新標准類型),則區別不大。 。 直播實例的區別| 資源
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.