Javascript eval问题

时间:2016-12-05 09:53:31

标签: javascript

我看到下面的代码,想知道它在做什么。 它是将eval结果转换为对象吗?

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

我有另一个问题。 eval是否可以作为反射?每次调用此代码时它都会加载到内存中并最终导致内存泄漏?

3 个答案:

答案 0 :(得分:2)

添加(Object Here)部分会使任何对象传递给函数的参数。

不,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()




答案 1 :(得分:0)

eval尝试将作为参数给出的字符串作为javascript代码进行评估,然后尝试运行代码。

在你的情况下,eval函数将创建方法“here here”,然后使用“object here”作为参数调用它

作为一个副节点,我建议不要使用eval,如果您需要做任何其他事情,因为eval可能会导致安全问题。以下是有关How evil is eval

的一些文档

答案 2 :(得分:0)

Javascript&#39的eval函数是一种运行字符串的方式,就像它是代码一样。

例如:

LikeView

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

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