慕斯王
2019-11-04 11:06:07
閱讀mozilla文檔后,我發(fā)現(xiàn)了這一點:在全局執(zhí)行上下文中(在任何函數(shù)之外),這是指全局對象,無論是否處于嚴格模式下。在玩了一點示波器之后,我發(fā)現(xiàn)在node.js REPL中...> this === globaltrue但是當我用同一行創(chuàng)建腳本時...$ cat > script.jsconsole.log(this === global)$ node script.jsfalse是否有一個原因?還是一個錯誤?
3 回答

肥皂起泡泡
TA貢獻1829條經(jīng)驗 獲得超6個贊
節(jié)點REPL是全局的。文件中的代碼位于“模塊”中,它實際上只是一個函數(shù)。
您的代碼文件變成了如下所示的簡化示例:
var ctx = {};
(function(exports) {
// your code
console.log(this === global);
}).call(ctx, ctx);
請注意,它是使用來執(zhí)行的.call(),并且該this值已設(shè)置為預(yù)定義的對象。

慕容708150
TA貢獻1831條經(jīng)驗 獲得超4個贊
使用節(jié)點從文件運行腳本時,它會隱式將其設(shè)置為具有自己作用域的模塊。
當您只運行它而沒有文件時,您將進入REPL,但不會進入任何模塊范圍。

有只小跳蛙
TA貢獻1824條經(jīng)驗 獲得超8個贊
因為this
腳本中沒有引用模塊的作用域(即,模塊執(zhí)行的上下文的變量綁定對象)。例如,var x = 42; console.log(this.x);
登錄undefined
腳本。我沒有立即發(fā)現(xiàn)任何內(nèi)容說明this
模塊中的內(nèi)容(它記錄為空對象),也沒有發(fā)現(xiàn)REPL使用來評估您的代碼this = global
。
添加回答
舉報
0/150
提交
取消