国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript基礎之this和箭頭函數詳析

2024-05-06 15:34:56
字體:
來源:轉載
供稿:網友

箭頭函數不會創建自己的this,它只會從自己的作用域鏈的上一層繼承this。

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

前言

閱讀下面的內容要先看下《你不知道的javascript(上)》中的第二部分:this和對象原型(里面對于this指向的理論部分主要來源于該書)。

問題

這周在寫代碼的時候,聽同事在說箭頭函數無法更改this的指向,并且使用下面代碼進行驗證:

// (1) 使用箭頭函數,this一直指向windowvar a = 0var obj1 = {  a: 1,  fn: () => { console.log(this.a) }}obj1.fn() // 結果:0var obj2 = {  a: 2}obj2.fn = obj1.fnobj2.fn() // 結果:0
// (2)不使用箭頭函數,this的指向會更改var obj3 = {  a: 3,  fn: function() { console.log(this.a) }}obj3.fn() // 結果:3

第一段代碼,無論fn綁定在哪個對象上,this.a始終指向全局的a(在非嚴格模式下的瀏覽器中我們可認為是window)

然而,這種說法是有問題(我認為)。

先理解this

this代表什么取決于:

    調用位置 四種綁定規則
var a = 0test() // 調用位置在此,通過【默認綁定規則】,可知test的this綁定到了window上function test() {  console.log(this) // this是window  var obj1 = {    a: 1,    fn: function() {      console.log(this) // this是obj1      console.log(this.a)     }  }  obj1.fn() // 調用位置在此,通過【隱式綁定規則】,可知fn中的this綁定到了obj1上  var obj2 = {    a: 2  }  obj2.fn = obj1.fn  obj2.fn() // 調用位置在此,【隱式綁定規則】,可知fn內的this綁定到了obj2}

箭頭函數中的this

其實這么起標題不太準確(然而想不出好的名字),因為箭頭函數是不會創建自己的this的(MDN),那么下面代碼的this是來源于哪里的呢?

var obj3 = {  a: 3,  fn: () => {    console.log(this.a)  }}obj3.fn() // 調用位置在此,this指向window
arrowFoo1() // (1)此處是調用位置,使用【默認的綁定規則】,this = windowfunction arrowFoo1() {  var obj1 = {    vv: 'svv1',    fn: () => {      console.log(this.vv, 'vv的值是')    }  }  // (2)調用位置是此處,若fn不是箭頭函數,那么這里也會有自己的this(即【隱式調用規則】,this綁定為obj1),而fn是箭頭函數,則它沒有this,那么fn內部調用的this是誰?  // 這時候需要根據作用域的規則,往外層查找,找到哪里?找到調用obj1.fn的調用棧,即arrowFoo1函數的this,那么從(1)中可知,那個this指向的是window  obj1.fn()  var obj2 = {    vv: 'svv2',  }  obj2.fn = obj1.fn  obj2.fn()}function arrowFoo2() {  var vv = '哦哦哦哦哦'  console.log(this.vv, 'vv的值是')}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 理塘县| 华容县| 凭祥市| 佛教| 丹棱县| 清河县| 开化县| 锦州市| 万盛区| 新巴尔虎右旗| 太仆寺旗| 德惠市| 高密市| 沙河市| 宁德市| 拉萨市| 介休市| 延津县| 海口市| 长丰县| 界首市| 来安县| 启东市| 南京市| 九寨沟县| 连云港市| 正安县| 乌海市| 旬邑县| 沈阳市| 通河县| 长春市| 抚松县| 镶黄旗| 德安县| 新乡县| 武定县| 抚州市| 海伦市| 伊宁县| 仪陇县|