我看到下面的代码,想知道它在做什么。 它是将eval结果转换为对象吗?
eval("Function here")("Object here");
我有另一个问题。 eval是否可以作为反射?每次调用此代码时它都会加载到内存中并最终导致内存泄漏?
答案 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");