2016-12-05 45 views
-6

我看到下面的代碼,並想知道它在做什麼。 它將eval結果轉換爲對象?Javascript eval questions

eval("Function here")("Object here"); 

我還有一個問題。 eval是否作爲反思工作?每次調用這段代碼時它都會加載到內存中,並最終導致內存泄漏?

+0

在我的節點控制檯,它只是觸發:*語法錯誤:意外標識符* –

+0

試一試,eval(console.log)({y:1}) – Alon

+2

您不顯示任何功能離子或物體。我們應該如何告訴你,那裏發生了什麼?還有一個「老」的說法:eval是邪惡的。請不要使用它。 – Seb

回答

2

在(對象在這裏)部分添加使任何對象傳遞函數的參數。

不,eval()不會顯示在反射 - 只有評估的代碼。

var test_object = "testing!"; 
 

 
console.log("part 1:"); 
 
// evaluates whatever is inside of eval(); 
 
eval(function(param) { 
 
    console.log(param); 
 
})(test_object); 
 

 
// result is 'testing!' 
 

 
// now to try to use reflection on eval 
 

 
var go = eval(function(param) { 
 
    console.log(param) 
 
}); 
 

 
console.log("part 2:"); 
 
console.log(go); 
 

 
//result does not include eval()

+0

謝謝。這似乎回答了我的問題! –

0

eval嘗試計算作爲參數,如JavaScript代碼串,然後嘗試運行代碼。

在你的情況eval函數將創建方法「的功能在這裏」,然後使用「對象這裏」作爲參數

作爲附帶節點調用它,如果你需要做能做的事我建議不要使用eval在任何其他情況下都可以完成,因爲評估可能會導致安全問題。這裏有一些關於How evil is eval的文檔

0

Javascript的eval函數是一種像運行代碼一樣運行字符串的方法。

例如:

eval("(function func1(p) {console.log('p: ' + p);})")("test"); 

是基本相同

(function func2(p) { 
    console.log('p: ' + p); 
})("test"); 

這基本上是一樣的

function func3(p) { 
    console.log('p: ' + p); 
} 
func3("test");