ES6中的箭頭函數和普通函數有什么區別?


1、普通函數中的this總是指向調用它的那個對象,

   箭頭函數沒有自己的this,他的this永遠指向其定義環境,任何方法都改變不了其指向,如call()、bind()、apply()。(正是因為它沒有this,所以也就不能用作構造函數,也沒有原型對象)

2、箭頭函數不能當作構造函數,也就是說,不能使用new命令,否則會報錯。

3、箭頭函數不能使用yield命令,因此箭頭函數不能用作genertor函數。

4、箭頭函數沒有原型屬性。

5、箭頭函數不能使用argumen對象,該對象在函數體內不存在。如果要用,可以用rest參數代替。

6、變量提升:由於js的內存機制,function的級別最高,而用箭頭函數定義函數的時候,需要var(let、const)關鍵字,而var所定義的變量不能得到變量提升。故箭頭函數一定要定義於調用之前。

 

this的指向問題?

1、普通函數中,this指向其函數的直接調用者;

2、箭頭函數中,this指向其定義環境,任何方法都改變不了其指向,如call()、bind()等;

3、構造函數中,如果不使用new,則this指向window,如果使用new創建了一個實例,則this指向該實例。

//不使用new指向window

function Person(name){

    console.log(this)//  window

    this.name = name;

}

Person('inwe')

// 使用new

function  Person (name) {

    this.name = name

    console.log(this) // people

    self = this

}

    var people = new Peron('iwen')

    console.log(self === people) //true

//這里new改變了this指向,將this由window指向Peoson的實例對象people

 

4、window內置函數中,如setInterval,setTimeout等,其內部的this指向Window。

5、匿名函數的this指向Window。

6、apply()、call()、bind()可以改變this的指向

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM