填坑十萬個為什麼?(21)

NO IMAGE

簡介:很多概念不清或忘記,重新構建自己的知識體系。每天問自己1~多個問題。我是菜鳥 成為大神之路!

1. 箭頭函數 =>

var materials = [
'Hydrogen',
'Helium',
'Lithium',
'Beryllium'
];
materials.map(function(material) { 
return material.length; 
}); // [8, 6, 7, 9]
materials.map((material) => {
return material.length;
}); // [8, 6, 7, 9]
materials.map(material => material.length); // [8, 6, 7, 9]

this指向定義它的函數域,而不是運行它的函數域
② 不綁定arguments使用 ... Rest函數代替
③ 箭頭函數不能用作構造器,和 new一起用會拋出錯誤。

var Foo = () => {};
var foo = new Foo(); // TypeError: Foo is not a constructor

④ 箭頭函數沒有prototype屬性。

var Foo = () => {};
console.log(Foo.prototype); // undefined

⑤通過 callapply 調用
由於 箭頭函數沒有自己的this指針,通過 call()apply() 方法調用一個函數時,只能傳遞參數(不能綁定this),他們的第一個參數會被忽略。

var adder = {
base : 1,
add : function(a) {
var f = v => v + this.base;
return f(a);
},
addThruCall: function(a) {
var f = v => v + this.base;
var b = {
base : 2
};
return f.call(b, a);
}
};
console.log(adder.add(1));         // 輸出 2
console.log(adder.addThruCall(1)); // 仍然輸出 2(而不是3 ——譯者注)

學習資料:
developer.mozilla.org/zh-CN/docs/…

相關文章

填坑十萬個為什麼?(25)

填坑十萬個為什麼?(24)

填坑十萬個為什麼?(23)

填坑十萬個為什麼?(22)