首页 > 关于eval的一些疑问

关于eval的一些疑问

var a = eval("()=>{return ('../assets/a.png')}")
console.log(a); // function ()=>{return ('../assets/a.png')}
var a = eval("function(){return ('../assets/a.png')}")
//Uncaught SyntaxError: Unexpected token (因为不能直接生成匿名方法)
var a = eval("function foo(){return ('../assets/a.png')}")
console.log(a); // undefined

第三个我就不太懂了,什么eval之后a是undefined呢?而第一个eval的a是能正确被赋值的。


var a = eval("(function foo(){return ('../assets/a.png')})")
console.log(a);

eval(string)

返回值:通过计算 string 得到的值(如果有的话)


eval我记得是将字符串当代码去执行。

所以说

eval("function foo(){return ('../assets/a.png')}")

就相当于是在console中执行下面的代码,

function foo(){return ('../assets/a.png')}

这只是定义一个function,所以没有任何的返回值,所以log就会打出undefined。

至于你第一个

()=>{return ('../assets/a.png')}

我大概查了一下,说这个()=>是Chrome的commandLineAPI,
你执行上面那个代码,在console中执行 $_ 就能把刚刚定义的function调用出来。
但是具体的还不太清楚,希望对你有帮助。


如果要把动态的function给一个变量,需要用 ()把函数括起来。或者你写个闭包

var funcString = "(function(){
    return function(){
        return ('../assets/a.png');
    };
})()";
var a = eval(funcString );
【热门文章】
【热门文章】