eval不是一个功能

mac*_*ejW 1 javascript syntax eval

它可能会引起人们的兴趣并节省几个小时,一个讨厌的捆绑问题,eval来自一个文件,而函数来自第二个文件.

eval('console.log(0)')
(function(x){console.log(x)})(1)
Run Code Online (Sandbox Code Playgroud)

将导致:未捕获TypeError:eval(...)不是函数

这是修复

eval('console.log(0)');
(function(x){console.log(x)})(1)
Run Code Online (Sandbox Code Playgroud)

缺少分号,我几次读过JS中的分号,大部分时间都是.

任何评论为什么eval在这种情况下不是一个函数?

Sco*_*cus 7

JS运行时并不适合猜测分号应该去哪里.

当它看到这个:

eval('console.log(0)')
(function(x){console.log(x)})(1)
Run Code Online (Sandbox Code Playgroud)

它错误地假设立即调用的函数表达式的结果是行的一部分eval(一个潜在的参数传递给计算的潜在函数eval).

以下是一个可行的示例:

eval("(function(message){ alert(message); })")
("Hi there!");
Run Code Online (Sandbox Code Playgroud)

但是,在您的情况下,eval不评估函数,因此尝试将参数传递给它失败,因此您的错误消息.

但是,它实际上与其关系不大eval().这可以在IIFE或任何以a开头的表达式之前省略分号时弹出(.

添加分号,允许运行时知道IIFE是独立的.

规则是您必须在任何后面跟a的行上插入半冒号((因为这是表达式的开始方式),以便将它们分开.但是,更好的规则是完全不依赖于自动分叉插入并始终将它们放在自己身上.