2015-08-25 28 views
0

我希望能夠遠程運行實時代碼。因此,我希望能夠在機器A上運行一些任意代碼,然後將一些代碼轉移到機器B並繼續從機器B運行。遠程運行javascript代碼的方法在哪裏?

我發現我可以獲得任何代碼功能通過fn.toString()

例子:

var foo = function(a, b) { return a + b; } 

console.log(foo.toString()); // prints "function (a, b) { return a + b; }" 

到目前爲止好,但在這種情況下,會發生什麼?

var bar = (function() { 
    var x = 5; 

    return function(a) { return a + x; } 
})(); 

console.log(bar.toString()); // prints "function (a) { return a + x; }" 

在這種情況下,有沒有辦法讓變量x,所以我不能在遠程機器上運行它。

有什麼建議嗎?

+0

在'console.log(bar.toString());' –

+0

@evc的外部範圍內定義'x'我無法控制'bar'函數。它可以被其他方改變。 –

+0

「遠程運行實時代碼」是什麼意思?你最終的目標是什麼?您可能可以在瀏覽器的調試器中設置斷點。 –

回答

0

你的第二個函數返回下面的字符串

function(a) { return a + x; } 

的原因是因爲你有一個返回上述功能的匿名函數。然後「bar」被定義爲該函數,而不是匿名函數。另外,考慮到你的返回函數是本地化的,那麼你不能逐字運行它。相反,你可以使用包含它的變量「bar()」,一旦它運行,它就會知道x的值。

+0

這一點不是變量'x'。重點是能夠將代碼傳輸到遠程服務器並從那裏運行。 –

+0

我說的是有效的。您無法獲取「bar」的字符串值,並按原樣在另一個環境中運行它。您需要創建「欄」的全部文本。這就是爲什麼你上面demo'd被稱爲匿名函數。它的匿名隱藏了本地範圍。 –