分号导致的问题
在 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