以下代码段会在行处抛出意外的令牌:b:function(func,data1) https://jsbin.com/qobicahica/edit?html,js,output
var Funcb = (function()
{
return
{
b: function (func, data1)
{
alert(1);
}
};
})();
Funcb.b(1,1);
但是,下面教程中的类似示例有效:
https://toddmotto.com/everything-you-wanted-to-know-about-javascript-scope/
// define module
var Module = (function () {
return {
myMethod: function () {
console.log('myMethod has been called.');
}
};
})();
// call module + methods
Module.myMethod();
编辑: 返回后删除换行符后工作,但为什么? 当javascript是如此宽容和松散类型时,那么为什么不会忽略?:
var Funcb = (function()
{
return{
b: function (func, data1)
{
alert(1);
}
};
})();
答案 0 :(得分:2)
问题出在第三行,在return语句后插入分号。请参阅rules for JS automatic semicolon insertion。
删除return
之后的换行符,它应该有效。
var Funcb = (function() {
return {
b: function (func, data1) {
alert(1);
}
};
})();
Funcb.b(1,1);
要回答编辑,请参阅specs的第28页。
来源
return a+b
通过自动分号插入转换为以下内容:
return; a+b;
表达式a + b不被视为要返回的值 return语句,因为LineTerminator将它与 令牌回报。
答案 1 :(得分:1)
您的退货声明应包含一些内容。大括号位于下一行,应该在return语句旁边。这会产生意外的令牌错误。
var Funcb = (function() {
return {
b: function (func, data1) {
alert(1);
}
};
})();
Funcb.b(1,1);