2016-12-05 47 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");