bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

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

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

為浙江等地區用戶提供了全套網頁設計制作服務,及浙江網站建設行業解決方案。主營業務為成都網站設計、網站制作、浙江網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

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

前言

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

問題

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

// (1) 使用箭頭函數,this一直指向window
var a = 0
var obj1 = {
  a: 1,
  fn: () => { console.log(this.a) }
}
obj1.fn() // 結果:0

var obj2 = {
  a: 2
}
obj2.fn = obj1.fn
obj2.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 = 0
test() // 調用位置在此,通過【默認綁定規則】,可知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 = window
function 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,那么其實它是通過作用域鏈,往外進行查找的,找到了就直接返回咯。

總結

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

本文名稱:JavaScript基礎之this和箭頭函數詳析
鏈接地址:http://vcdvsql.cn/article46/pehphg.html

成都網站建設公司_創新互聯,為您提供App設計、ChatGPT微信小程序、品牌網站建設、外貿網站建設、網站導航

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設公司