函数“;链接“;与&&运算符返回undefined
Function "chaining" with && operator returns undefined
我有以下功能:
function A1()
{
return B() && C();
}
function A2()
{
return
B() &&
C();
}
function B()
{
return true;
}
function C()
{
return true;
}
调用A1返回true,但A2返回undefined。A1和A2之间的唯一区别是空白。发生了什么事?在我的真实代码中,我不想把A1函数a写成一行,因为它会很长,可读性不强。
您正成为自动分号插入的牺牲品。解释器会在返回语句后添加一个分号,所以这实际上就是正在发生的事情:
function A2()
{
return;
// ^ Automatically inserted semicolon
B() &&
C();
}
由于现在有一个没有显式返回值的return
语句,因此函数将返回undefined
。
如果您查看规范中return
语句的语法:
ReturnStatement
:
nbsp;return
[此处无线路终止符]表达式;
您可以看到,它不允许在return
关键字和表达式之间使用行终止符(这被称为"受限生产")。如果遇到行终止符,则应用自动分号插入的第三条规则:
当程序从左到右解析时,遇到语法的某些生成所允许的令牌时,但该生产是一个受限生产,该令牌将是紧接在受限生产中的注释"[no LineTerminatorhere]"之后的终端或非终端的第一个令牌(因此这种令牌被称为受限令牌),并且该受限令牌与前一个令牌由至少一个LineTerminator分隔,然后在受限制的令牌之前自动插入分号。
我不想把A1函数a写成一行,因为它会很长。。。
您仍然可以在多行上打断return
语句,您只需要小心换行符的位置(只需确保它们出现在表达式中,而不是之前):
function A2()
{
return B() &&
// ^ Invalid to put a semicolon here, so ASI doesn't apply
C();
}
return (
B() &&
C()
);
也能正常工作
相关文章:
- jquery点击函数select&取消选择
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- Angular js-返回一个包含类似
- 一点javascript元编程&可链接的设置器
- /undefined在我的404错误日志中多次出现
- RequireJS向模块传递配置总是返回undefined
- 通过JSON&比较时间
- Jquery模板,如果xx&&如果yy
- JSON数组数据返回Undefined
- 为什么会出现错误,“UncaughtTypeError:undefined不是函数”
- jQuery工具验证器自定义效果-添加&消除影响
- Twitter引导程序Typeahead-Id&标签
- Array.lenght = undefined
- AngularJS&JSON-从Previous&下一个对象
- 什么是&&在没有if的行中的变量之间
- mongoose.connect undefined不是一个函数
- 关于引入外部javascript文件的问题&css通过https
- HTML5拖拽&drop正在抛出undefined不是函数错误
- 函数“;链接“;与&&运算符返回undefined