我碰巧遇到了以下奇怪的案例:
其中一个网络调用返回了这样的响应:
window.function1 = function() {
console.log('function 1');
} window.project = 'test';
但是当评估以下脚本时,它将返回错误
意外标识符
在function1定义之后添加semi-colon
时,此问题会得到解决所以正确的修复方法是:
window.function1 = function() {
console.log('function 1');
}; window.project = 'test';
我很想知道背后的原因。
答案 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
运算符,以避免两个变量之间的语法错误function1
,project
window.function1 = function() {
console.log('function 1');
}, window.project = 'test';