2014-01-23 67 views
0

我有以下內容的js文件:當使用`this`調用匿名函數時,NodeJS調試器是否會崩潰?

(function (context) { 
    console.log(123); 
    debugger; 
})(this); 

然後我跑我的腳本在調試模式:

$ node debug script.js 

沒有任何理由爲這調試模式下的其他行不是綠色的?

如果函數裏面我做的:

debug> repl 
> context 
{} 

,但是當我這樣做:

> this 

崩潰......即使按CTRL + C能不能停止的過程,但只有關閉標籤。

此外,只需在文件的第一行中添加var foo = this即可修復此問題。

爲什麼?這是一個錯誤?

+0

對我來說不可重現。你使用哪個版本? – thefourtheye

+0

@thefourtheye'v0.10.24'這是最新的穩定版嗎? –

回答

1

在節點掛起時(在REPL模式)你問的this值,檢查的值相同的地方:

this === global 

你應該得到true。此外,如果您詢問global的值,則節點將像掛上this那樣掛起。但是,您可以訪問某些字段沒有問題。我能夠訪問this.module(或global.module)並獲得合理的價值。

所以這看起來像一個錯誤,我敢說這可能是一個處理循環引用的錯誤。一般來說,Node可以通過顯示[Circular]來正確處理它們,但是在這裏的特定情況下似乎存在問題。

做任何的這些都會導致調試打印{}this,而不是掛:

  • 在文件開始添加"use strict";

  • debugger;添加爲文件的第一個語句。

  • 在文件的開頭添加一個帶有副作用的語句,如console.log("start");

下沒有任何效果:

  • 並稱,可以想見,在文件開始被優化掉像var x = 1;function foo() {}的聲明。

  • 此:

    var x = 1; 
    
    (function (context) { 
        console.log(123); 
        debugger; 
    })(this); 
    
    console.log(x); 
    

    var x = 1調試器停止所以不喜歡被優化掉。

+0

*調試器停在var'x = 1'上,所以它不像它被優化掉。* - 據我所知,調試器停在第一行(即使沒有斷點)。好答案! –

相關問題