分号导致的问题分析
发布时间:2023-03-13 12:55:56 所属栏目:教程 来源:
导读:在 JavaScript 中分号是可选的,解释器会自动对分号进行补全,如果选择不写分号,需要注意一些使用上的问题。
不写分号,相当于将插入分号的权利递交给解释器,对于某些情况,可能会出现非预期的效果:
函数返
不写分号,相当于将插入分号的权利递交给解释器,对于某些情况,可能会出现非预期的效果:
函数返
在 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 来帮助检查代码。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |