请看这个
左边的“原始文本”工作完美,右边的“更改文本”给我错误
未捕获的语法错误:意外的令牌} MapModule.js:34
未捕获的类型错误:无法调用未定义的 localhost/:103(匿名函数)localhost/:103 的方法“初始化”
我不明白有什么区别。
如果您想知道我是如何修改文件的,这很简单,我只是从 Aptana 3 source->format 中使用...
请看这个
左边的“原始文本”工作完美,右边的“更改文本”给我错误
未捕获的语法错误:意外的令牌} MapModule.js:34
未捕获的类型错误:无法调用未定义的 localhost/:103(匿名函数)localhost/:103 的方法“初始化”
我不明白有什么区别。
如果您想知道我是如何修改文件的,这很简单,我只是从 Aptana 3 source->format 中使用...
这是因为 JavaScript 的自动分号插入 (ASI) 会在某些语句以换行符结束时插入分号。您可以在这个SO question中了解它。
在您的情况下,代码在 return 语句中有一个换行符,将插入一个分号。这意味着:
return
{
initialize: initialize,
};
.. 将变为以下内容:
return;
{
initialize: initialize,
};
// will now always return undefined
未捕获的语法错误:意外的令牌} MapModule.js:34
此错误是因为您在对象文字内有一个尾随逗号:
return {
initialize: initialize, // <-- whoops
}
这在大多数 JS 引擎中实际上是合法的……除了 IE。令人惊讶的是,这是 IE 根据规范所做的一件事。:-) 要解决此问题,请避免使用尾随逗号:
return {
initialize: initialize // FIXED
}
希望这可以解决一些问题。
你破坏了return
陈述。您不能在return
语句之后的下一行开始对象文字,因为解析器会感到困惑。换句话说,您必须将 与{
放在同一行。return
该问题涉及有问题且有争议的 JavaScript“分号插入”规则。
原始代码还在对象文字的末尾包含一个杂散的逗号。那应该被删除。
return 语句期望您要返回的值在同一行中。所以这:
return {
a:1
};
可以正常工作,而这:
return
{
a:1
};
会回来undefined
,因为后面什么都没有return
。剩下的是这个声明:
{
a:1
};
这实际上是一个不应产生任何错误的有效语句。正如 Spoike 和 Bergi 已经提到的那样,您收到一个语法错误,因为后面有一个尾随逗号,a:1
这表明在 property 后面应该有另一个属性a
,但该属性不存在。
顺便提一句。这是 Doug Crockford 的视频的链接,它解释了这个案例以及为什么{a:1};
是一个有效的声明:http ://www.youtube.com/watch?v=hQVTIJBZook#t=30m38s