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