函式的擴充套件

2021-09-29 09:43:44 字數 2273 閱讀 5323

只寫了部分內容,詳細了解 es6入門

函式的name屬性會返回函式名,這個屬性在 es6 之前就已經被絕大多數瀏覽器支援,只是在 es6 完善了這個屬性以及新增了一些新內容而已。

function

foo(

)console.

log(foo.name)

;//foo

letf

=function()

;console.

log(f.name)

;//f

letbar

=function

baz();

console.

log(bar.name)

;//baz

第一塊**,定義了函式名為 foo 的函式,所以 name 屬性返回 foo

第二塊**,定義了乙個匿名函式並將其賦值給變數 f,此時匿名函式的函式名相當於是 f 了,所以 name 屬性返回 f

第三塊**,定義了名為 baz 的函式,並將其賦值給變數 bar,name屬性是返回函式名的,所以還是會返回 baz

es6 允許使用「箭頭」(=>)定義函式。

//es6 新寫法

varf

= v => v;

//等價於 es5 寫法

varf

=function

(v);

如果箭頭函式不需要引數或需要多個引數,就使用乙個圓括號代表引數部分。

//es6 新寫法

varf=(

)=>1;

//等價於 es5 寫法

varf

=function()

;//es6 新寫法

varf

=(num1,num2)

=> num1 + num2;

//等價於 es5 寫法

varf

=function

(num1,num2)

;

如果箭頭函式的**塊部分多於一條語句,就要使用大括號將它們括起來,並且使用return語句返回。

var

sum=

(num1, num2)

=>

;

由於大括號被解釋為**塊,所以如果箭頭函式直接返回乙個物件,必須在物件外面加上括號,否則會報錯。

// 報錯

letgettempitem

= id =>

;// 不報錯

letgettempitem

= id =>()

;

箭頭函式可以與變數解構結合使用。

const

full=(

)=> first +

' '+ last;

// 等同於

function

full

(person)

箭頭函式使函式表達變得更加簡潔,同時使用它也有幾個注意點

注意點

(1)函式體內的this物件,就是定義時所在的物件,而不是使用時所在的物件。

(2)不可以當作建構函式,也就是說,不可以使用new命令,否則會丟擲乙個錯誤。

(3)不可以使用arguments物件,該物件在函式體內不存在。如果要用,可以用 rest 引數代替。

(4)不可以使用yield命令,因此箭頭函式不能用作 generator 函式。

上面四點中,第一點尤其值得注意。this物件的指向是可變的,但是在箭頭函式中,它是固定的。

function

foo(),

100);}

var id =21;

foo.

call()

;// id: 42

上面**中,settimeout的引數是乙個箭頭函式,這個箭頭函式的定義生效是在foo函式生成時,而它的真正執行要等到 100 毫秒後。如果是普通函式,執行時this應該指向全域性物件window,這時應該輸出21。但是,箭頭函式導致this總是指向函式定義生效時所在的物件(本例是),所以輸出的是42。

箭頭函式不適用場景:

第乙個場合是定義物件的方法,且該方法內部包括this。

第二個場合是需要動態this的時候,也不應使用箭頭函式。

(比如 a.onclick = function(); 這種場景是不適合使用 this 的)

函式的擴充套件

函式的擴充套件有以下三個方面 1 函式的預設值 2 rest引數 3 箭頭函式 函式的預設值 es5傳預設值時,的兩種方法 1 條件判斷 2 三元運算子 bug,如果a 0時,回去後面的值 var sum function a,b es6 let sum a 2,b 3 sum 2,3 rest引數...

函式的擴充套件

函式的擴充套件 1.引數預設值 2.引數的解構賦值 3.rest引數 4 擴充套件運算子 如果不傳值,則預設的值為hello,傳值之後為jieke function foo param foo jieke function foo param hello foo 引數的預設 function foo...

函式引數的擴充套件。

1 函式引數的擴充套件。1 函式引數的預設值。1 c 在函式宣告時為函式提供乙個預設的引數值。當函式呼叫沒有引數的值的時候,使用預設引數。void test int x 0 int main void test int x 2 引數預設值必須在函式宣告中指定。3 函式定義中是否可以存在引數的預設值?...