麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 10:52:51
字體:
來源:轉載
供稿:網友

箭頭函數不會創建自己的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代表什么取決于:

  1. 調用位置
  2. 四種綁定規則
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的值是')}

因此,箭頭函數里面要是用到了this,那么其實它是通過作用域鏈,往外進行查找的,找到了就直接返回咯。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲最新无码中文字幕久久 | 欧美一级黄视频 | 久久99精品国产 | 毛片免费看电影 | 毛片免费大全短视频 | 欧美大电影免费观看 | 国产精品片一区二区三区 | 久久蜜臀一区二区三区av | 久久久一区二区 | 国产色视频一区 | 18一20岁一级毛片 | 久久精品a一级国产免视看成人 | 免费毛片观看 | 亚洲成人激情av | 欧美一级爱爱 | 免费毛片播放 | 色网站免费观看 | 在线成人一区二区 | 欧美一级黄视频 | 亚洲精品一二三区 | 超碰97人人艹 | 久久久久久久一区 | 午夜噜噜噜| 久久精品国产99久久6动漫亮点 | 操操日日| 亚洲午夜影院在线观看 | 永久免费黄色大片 | 久久91久久久久麻豆精品 | 久久精品一级片 | 亚洲导航深夜福利涩涩屋 | 新久草在线视频 | 亚洲国产在 | 久久久久av电影 | 久久免费视频5 | 国产孕妇孕交大片孕 | 欧美 日韩 国产 在线 | 国产一级片91 | 欧美日韩免费一区 | 有兽焉免费动画 | 精品久久一区二区 | 老师你怎么会在这第2季出现 |