JS中的半结肠问题

时间:2015-12-16 04:41:53

标签: javascript minify

我碰巧遇到了以下奇怪的案例:

其中一个网络调用返回了这样的响应:

window.function1 = function() {
  console.log('function 1');
} window.project = 'test';

但是当评估以下脚本时,它将返回错误

  

意外标识符

在function1定义之后添加semi-colon时,此问题会得到解决所以正确的修复方法是:

window.function1 = function() {
  console.log('function 1');
}; window.project = 'test';

我很想知道背后的原因。

3 个答案:

答案 0 :(得分:2)

window.function1 = function() {
  console.log('function 1');
} window.project = 'test';

js引擎将整个内容读作一个语句,因为它无法为匿名函数赋值找到任何分号,它只会继续解析以查找window.project = 'test,因此它会给你一个错误。

window.function1 = function() {
  console.log('function 1');
}; window.project = 'test';

这里因为你在匿名函数之后有一个分号,js引擎可以发现这些是两个不同的语句。

答案 1 :(得分:1)

在Javascript中,如果语句后跟换行符,则可以省略分号。

这里你有2个语句在同一行,所以第一个分号是强制性的。

但你可以这样写:

window.function1 = function() {
  console.log('function 1');
}; window.project = 'test'

(没有最后一个分号)

此处有更多详情:https://www.codecademy.com/forum_questions/507f6dd09266b70200000d7e

答案 2 :(得分:0)

function1是一个变量,似乎在window.project之前没有结束; js将这两个变量解释为function1。可以在,声明后添加逗号function1运算符,以避免两个变量之间的语法错误function1project



window.function1 = function() {
  console.log('function 1');
}, window.project = 'test';