ES6程式設計 箭頭函式總結

2021-08-17 01:57:43 字數 2170 閱讀 6589

單個引數,且函式執行體僅包含一條語句,返回值無需

return

關鍵字。

const foo = a => a + 1;

foo(1); // 2

單個引數,函式執行體含多條執行語句,需要使用塊級**段,即使用

{}括起來,不過此時若存在返回值,務必記得

return。

const foo = a =>

foo(1); // 3

多個引數需要

()括起來。

const test = (a, b) => a + b;

test(2, 3); // 5

多個引數,且函式中包含多條執行語句。

const foo = (a, b) =>

foo(2, 3); // 7

從以上**展示看,僅僅是語法糖在**編寫上的改進,其核心價值尚未體現。在

es5中,經過遇到上下文(

context

)混亂問題,看一下典型案例的分析。

var obj = , 0);

},b: function()

};obj.a();

// uncaught typeerror: this.b is not a function

報錯原因:理解js中

this

指向有個簡單的原則,即方法被哪個物件呼叫,方法內部的

this

就指向哪個物件。在上例中,

settimeout

宣告的執行體被

window

對用呼叫,而在

window

物件下沒有方法

b的宣告,因而報錯。

要驗證這個結論是否正確也很簡單,在

window

作用域下宣告方法

b,觀察執行結果即可。

window.b = function() ;

var obj = , 0);

},b: function()

};obj.a(); // window scope

// uncaught typeerror: this.b is not a function

每遇到這種情況,實現**設計者意圖,通常有兩種解決方式:

·      

在settimeout

執行體內使用當前物件的引用,不要直接用

this關鍵

字 ·      

利用call

、動態改變

this指向

第二種方式在此場景中並不必要,下面再細說,這裡使用第一種方式即可達成目標。

var obj = , 0);}};

在es6

中,可使用箭頭函式取代以上二種方案。

let obj = ,

b()

};obj.a(); // run b

call

、均可動態改變函式內

this

指向,區別是傳參方式不同。

var b = 'window作用域變數';

var obj = ,

b: 'obj物件屬性'

};obj.a(1, 2); // 1 2 *****> obj物件屬性

obj.a.call(window, 1, 2); // 1 2 *****> window作用域變數

//es5

function test(a)

console.log(a);

}test(); // 1

在es6

中有了更優雅的做法:

const test = (a = 1) =>

test(); // 1

test(2); // 2

// 對於物件型別的引數

const foo = ( = {}) =>

而對於複雜引數型別,比如引數值為物件,在保證引數預設值方面,

es6會讓你寫**的速度飛起來,並且讓**看起來不那麼髒,請比較以下**。

// es5

function test(cfg) ;

cfg.str = cfg.str || 'aaaa';

cfg.callback = cfg.callback || function() {};

// todo...

}// es6

const test = (} = {}) => ;

ES6箭頭函式總結

1.箭頭函式基本形式 let func num num let func num let sum num1,num2 num1 num2 1,2,3 map x x x 2.箭頭函式基本特點 1 箭頭函式this為父作用域的this,不是呼叫時的this let person person.init...

es6箭頭函式

本例是在了解es6知識後在原來定義函式的基礎上進行理解var searchvalue 查詢匹配物件 var button var input var select button if searchvalue.input undefined button.click else 重新整理 tableli...

es6 箭頭函式

1.單引數 function cheng a 3 let cheng a 3 a a console.log cheng 9 2.多引數 function add a,b let add a,b a b 預設返回值 console.log add 3,9 3.無返回值 function add a,...