var calculator = function ()
{
function abc() { return (2+3); }
return {
addFun: abc
}
}();
var calcu = function () {
function abc() { return (3+4); }
return
{
addFun: abc
}
}();
$(document).ready(function () {
alert(calculator.addFun());
**alert(calcu.addFun());**
});
计算器和计算功能有什么区别? calcu函数在执行时会出错。
差异只是花括号是“计算”中的下一行。如果我删除下一个并且使用“return”关键字放置花括号,那么工作正常。
请解释原因?
答案 0 :(得分:5)
它被解析为:
return; // returns undefined
// a block:
{
addFun: abc // syntax error!
};
因为自动分号插入。
将其更改为:
return {
addFun: abc
};
答案 1 :(得分:5)
它被称为automatic semicolon insertion:
遇到
continue
,break
,return
或throw
令牌并且在下一个令牌之前遇到 LineTerminator 时,在continue
,break
,return
或throw
令牌后自动插入分号。
由于在return
语句后面有换行符,系统会自动插入分号,将代码转换为:
return;
{
addFun: abc
}
答案 2 :(得分:2)
返回是JavaScript中棘手的关键字。在第一个示例中,您将向计算器函数返回一个匿名对象,在第二个示例中,您不返回任何值。 JavaScript将解释第二个函数:
var calcu = function() {
function abc() ...
return; // return undefined
{
addFun: abc
}
请注意,半冒号在return关键字后被解释,因此calcu函数将不返回任何内容。
答案 3 :(得分:1)
return
{
addFun: abc
}
这是错误的,因为JavaScript会执行返回并将退出。 这应该是
return {
addFun: abc
}
答案 4 :(得分:1)
看看jshint之类的linting工具,以避免这个和许多其他错误,这是它的输出:
这一部分会发生什么:
return
{
addFun: abc
}
被解释为两个语句,一个返回void(函数返回void immediatelly)加上一个包含未赋值给任何东西的addFun的对象表达式。