Javascript源格式很奇怪

时间:2013-06-02 16:45:06

标签: javascript

请参阅this

左边的“原始文字”工作完美,右边的“更改文字”给我错误

  

Uncaught SyntaxError:意外的令牌} MapModule.js:34

  未捕获的TypeError:无法调用未定义的localhost /:103的方法'initialize'   (匿名函数)localhost /:103

我无法理解其中的区别。

如果您想知道我是如何修改文件的,那很简单,我只是使用了Aptana 3源代码 - >格式......

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

相关问题