參數
function makeRequest(rul,timeout = 2000,callback) {
//函數其余部分
}
- 上面的函數只有當不為第二個參數傳入值或者主動為第二個參數傳入undefined時才會使用timeout的默認值
- 在ES6中一個函數使用了默認參數值,會使得arguments對象保持與命名參數的分離,無論參數如何變化,arguments對象不再隨之改變。
function mix(first,second='b') {
console.log(arguments.length); // 1 之傳入了一個參數
console.log(first === arguments[0]) // true
console.log(second === aruments[1]) // false //arguments[1]是undefined
}
mix('a');
- 默認參數表達式
- ES6中可以使用先定義的參數作為后定義參數的默認值,但是后定義的參數不能作為先定義參數的默認值。
- 默認參數也存在臨時死區,定義參數時會為每個參數創建一個新的標識符綁定,該綁定在初始化之前不可被引用,如果訪問會導致程序錯誤
不定參數
- 在函數的命名參數錢添加三個點(...)就表明這是一個不定參數,該參數為一個數組,包含著自它之后出入的所有參數,通過這個數組名即可逐一訪問里面的參數。
- 不定參數的使用限制:1.每個函數最多只能聲明一個不定參數,而且一定要放在所有參數的末尾。2.不定參數不能用于對象字面量setter中
- arguments對象包含不定參數,無論是否使用不定參數,argumetns對象總是包含所有傳入函數的參數
展開運算符
- 展開運算符可以讓你指定一個數組,將它們打散后作為各自獨立的參數傳入函數
- 展開運算符的使用:例如`Math.max()`方法可以接受任意數量的參數并返回值最大的一個,但是該方法不允許傳入數組。
```
// ES5使用
let values = [25,50,75,100];
console.log(Math.max.apply(Math,values)); //100
// Es6使用
console.log(Math.max(...values)); //100
```
判斷函數被調用的方法
- 在ES5中判斷一個函數是否通過new關鍵字被調用(或者說,判斷該函數是否作為構造函數被調用),最常使用的是instanceof
- instanceof語法:
Object instanceof constructor;
instanceof
運算符用來檢測constructor.prototype
是否存在于參數Object
的原型鏈上
- ES6引入了
new.target
這個元屬性,元屬性市值非對象的屬性,其可以提供非對象目標的補充信息,當調用函數的[construct]方法時,new.target被賦值new操作符的目標,通常是新創建的對象實例。如果用[[call]]方法,則new.target的值為undefined。
塊級函數
if(true) {
function doSomething() {
}
}
- 塊級函數的聲明提升
- 函數聲明的塊級函數會被提升至塊的頂部而用let定義的函數表達式不會被提升
- ES6嚴格模式下塊級函數只會提升至塊的頂部,但是在非嚴格模式下函數會被提升至外圍函數或全局作用域的頂部。
箭頭函數
- 箭頭函數是一種使用箭頭(=>)定義函數的新語法
- 與傳統函數的不同:
- 沒有this、super、arguments和new.target綁定 這些值由外圍一層非箭頭函數決定
- 不能通過new關鍵字調用 箭頭函數沒有[[constructor]]方法,如果通過new關鍵字調用箭頭函數,程序會拋出錯誤。
- 沒有原型 不存在
prototype
這個屬性
- 不可以改變
this
的綁定 在函數的生命周期內始終保持一致
- 不支持arguments對象
- 不支持重復命名的參數
- 箭頭函數的語法
- 當箭頭函數只有一個參數時,可以直接寫參數名,箭頭緊隨其后,箭頭右側額表達式被求值后便立即返回
let reflect = value => value;
- 如果要傳入兩個或兩個以上的參數,要在參數的兩側添加一對小括號
let sum = (num1,num2) => num1+num2;
- 如果函數沒有參數,也要在聲明的時候寫一組沒有內容的小括號
let getName = () => 'Tgb';
- 可以有函數體
let sum = (num1,num2) => {
return num1+num2;
}
- 箭頭函數返回對象字面量
let getTempItem = id => ({ id: id,name: 'temp' });
- 箭頭函數的自調用 沙箱模式
let person = ((name) => {
return {
getName: function() {
retrun name;
}
};
})('tgb');
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。