W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
7.1?使用函數(shù)聲明代替函數(shù)表達式。
為什么?因為函數(shù)聲明是可命名的,所以他們在調用棧中更容易被識別。此外,函數(shù)聲明會把整個函數(shù)提升(hoisted),而函數(shù)表達式只會把函數(shù)的引用變量名提升。這條規(guī)則使得箭頭函數(shù)可以取代函數(shù)表達式。
// bad
const foo = function () {
};
// good
function foo() {
}
7.2?函數(shù)表達式:
// 立即調用的函數(shù)表達式 (IIFE)
(() => {
console.log('Welcome to the Internet. Please follow me.');
})();
7.3?永遠不要在一個非函數(shù)代碼塊(if
、while
?等)中聲明一個函數(shù),把那個函數(shù)賦給一個變量。瀏覽器允許你這么做,但它們的解析表現(xiàn)不一致。
7.4?注意:?ECMA-262 把?block
?定義為一組語句。函數(shù)聲明不是語句。閱讀 ECMA-262 關于這個問題的說明。
// bad
if (currentUser) {
function test() {
console.log('Nope.');
}
}
// good
let test;
if (currentUser) {
test = () => {
console.log('Yup.');
};
}
7.5?永遠不要把參數(shù)命名為?arguments
。這將取代原來函數(shù)作用域內的?arguments
?對象。
// bad
function nope(name, options, arguments) {
// ...stuff...
}
// good
function yup(name, options, args) {
// ...stuff...
}
7.6?不要使用?arguments
??梢赃x擇 rest 語法?...
?替代。
為什么?使用?
...
?能明確你要傳入的參數(shù)。另外 rest 參數(shù)是一個真正的數(shù)組,而?arguments
是一個類數(shù)組。
// bad
function concatenateAll() {
const args = Array.prototype.slice.call(arguments);
return args.join('');
}
// good
function concatenateAll(...args) {
return args.join('');
}
7.7?直接給函數(shù)的參數(shù)指定默認值,不要使用一個變化的函數(shù)參數(shù)。
// really bad
function handleThings(opts) {
// 不!我們不應該改變函數(shù)參數(shù)。
// 更加糟糕: 如果參數(shù) opts 是 false 的話,它就會被設定為一個對象。
// 但這樣的寫法會造成一些 Bugs。
//(譯注:例如當 opts 被賦值為空字符串,opts 仍然會被下一行代碼設定為一個空對象。)
opts = opts || {};
// ...
}
// still bad
function handleThings(opts) {
if (opts === void 0) {
opts = {};
}
// ...
}
// good
function handleThings(opts = {}) {
// ...
}
7.8?直接給函數(shù)參數(shù)賦值時需要避免副作用。
為什么?因為這樣的寫法讓人感到很困惑。
var b = 1;
// bad
function count(a = b++) {
console.log(a);
}
count(); // 1
count(); // 2
count(3); // 3
count(); // 3
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: