亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

全部開發者教程

JavaScript 入門教程

分號導致的問題

JavaScript 中分號是可選的,解釋器會自動對分號進行補全。

如果選擇不寫分號,需要注意一些使用上的問題。

不寫分號,相當于將插入分號的權利遞交給解釋器,對于某些情況,可能會出現非預期的效果:

函數返回值換行

var fn = function() {
  return
    '我怎么沒被返回呢??'
}

console.log(fn()) // 輸出:undefined

由于 return 已經是可以被作為完整的語句,所以解釋器會自動在 return 后插入一個分號,上面這段代碼在被處理后可能是這樣的:

var fn = function() {
  return;
    '我怎么沒被返回呢??';
};

console.log(fn());

所以輸出的是 undefined。

某個變量或者屬性突然被當作函數調用

var number = 10

var result = 1 + number

(function() {
  console.log(1)
})()

// 報錯 number is not a function

這種情況,解釋器會以為是要調用 number,但 number 是個數值,并不是一個函數,所以報錯了,這段代碼被處理后,可能是這樣的:

var number = 10;

var result = 1 + number(function() {
  console.log(1);
})();

碰到這個問題的大部分場景都是寫自執行的匿名函數,所以通常不寫分號的情況下,要養成在自執行匿名函數前寫一個分號的習慣:

var number = 10

var result = 1 + number

;(function() {
  console.log(1)
})()

數據被當作數組成員或對象成員進行訪問

var number = 1

var result = 1 + number

[1, 2, 3].forEach(function(item) {
  result += item
})

// 報錯:Cannot read property 'forEach' of undefined

這個報錯原因和上一個點類似,也是 number 被誤當作有成員的對象或者數組了,上面代碼被處理后可能是這樣的:

var number = 1;

var result = 1 + number[1, 2, 3].forEach(function(item) {
  result += item;
});

顯然 number[3] 是取不到東西的。


其他還有許許多多情況,場景與之都類似,所以在不寫分號的時候一定要注意,條件允許的情況下借助 eslint 來幫助檢查代碼。