为什么添加分号会使此代码生效?

时间:2017-11-17 06:11:31

标签: javascript node.js

process.on('exit', function () {
    console.log("Exiting normally")
})

process.on('uncaughtException', function (err) {
    console.log("Caught - " + err)
})

[1,2,3,4,5].forEach(function(element) {
    console.log("Loop " + element)
})

这打破了:

  

Caught - TypeError:无法读取未定义

的属性'forEach'      

正常退出

当我添加分号时,它可以工作:

process.on('exit', function () {
    console.log("Exiting normally")
})

process.on('uncaughtException', function (err) {
    console.log("Caught - " + err)
}); // Added semi colon here

[1,2,3,4,5].forEach(function(element) {
    console.log("Loop " + element)
})

这是否意味着我应该在每个声明之后使用分号来保证安全?

2 个答案:

答案 0 :(得分:1)

假设你有一个函数returnArray(),你猜对了,它就是一个数组。

让我们说你打这个电话:

#do stuff
returnArray();
[n].blah
#do other stuff
#this returns an array. say [1,2,3,4,5];
#and in the next line it does [n].blah

现在假设您在没有分号的情况下拨打同一个电话

#do stuff
returnArray()
[n].blah
#do stuff
#this effectively does [1,2,3,4,5][n]
#which is the nth index element of the returned array.

这类似于获取返回数组的第n个索引,这通常不是您尝试做的。

答案 1 :(得分:0)

当你不使用分号javascript时,请考虑以下方式

process.on('',function (err) {..})[1,2,3,4,5].forEach(function(element) {
    console.log("Loop " + element)
})

忘记了process.on()没有像[1,2,3,4,5]那样的属性,这就是为什么它是未定义的