关于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是能正确被赋值的。

阅读 3.6k
3 个回答
var a = eval("(function foo(){return ('../assets/a.png')})")
console.log(a);

eval(string)

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

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

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

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调用出来。
但是具体的还不太清楚,希望对你有帮助。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题