分号导致的问题
在 JavaScript 中分号是可选的,解释器会 自动 对分号进行补全。
如果选择不写分号,需要注意一些使用上的问题。
不写分号,相当于将插入分号的权利递交给解释器,对于某些情况,可能会出现非预期的 效果 :
函数 返回值换行
var fn = function ( ) {
return
'我怎么没被返回呢??'
}
console . log ( fn ( ) ) // 输出 :undefined
由于 return 已经是可以被作为完整的语句,所以解释器会 自动 在 return 后插入 一个 分号,上面这段 代码 在被处理后可能是这样的:
var fn = function ( ) {
return ;
'我怎么没被返回呢??' ;
} ;
console . log ( fn ( ) ) ;
所以 输出 的是 undefined 。
某个变量或者 属性 突然被当作 函数 调用
var number =
var result = + number
( function ( ) {
console . log ( )
} ) ( )
// 报错 number is not a function
这种情况,解释器会以为是要 调用 number,但 number 是个数值,并不是 一个 函数 ,所以报错了,这段 代码 被处理后,可能是这样的:
var number = ;
var result = + number ( function ( ) {
console . log ( ) ;
} ) ( ) ;
碰到这个问题的大部分场景都是写自执行的匿名 函数 ,所以通常不写分号的情况下,要养成在自执行匿名 函数 前写 一个 分号的习惯:
var number =
var result = + number
; ( function ( ) {
console . log ( )
} ) ( )
数据被当作数组成员或对象成员进行访问
var number =
var result = + number
[ , , ] . forEach ( function ( item ) {
result += item
} )
// 报错:Cannot read property 'forEach' of undefined
这个报错原因和上 一个 点类似,也是 number 被误当作有成员的对象或者数组了,上面 代码 被处理后可能是这样的:
var number = ;
var result = + number [ , , ] . forEach ( function ( item ) {
result += item ;
} ) ;
显然 number[3] 是取不到东西的。
其他还有许许多多情况,场景与之都类似,所以在不写分号的时候一定要注意,条件允许的情况下借助 eslint 来帮助检查 代码 。
对象属性访问问题 ? ?JavaScript 关键字声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did92469