最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript基礎(chǔ)之this和箭頭函數(shù)詳析

 更新時(shí)間:2019年09月05日 09:00:37   作者:蘑菇?jīng)]有頭  
這篇文章主要給大家介紹了關(guān)于JavaScript基礎(chǔ)之this和箭頭函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JavaScript具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

箭頭函數(shù)不會(huì)創(chuàng)建自己的this,它只會(huì)從自己的作用域鏈的上一層繼承this。

由于箭頭函數(shù)沒(méi)有自己的this指針,通過(guò) call() 或 apply() 方法調(diào)用一個(gè)函數(shù)時(shí),只能傳遞參數(shù)(不能綁定this),他們的第一個(gè)參數(shù)會(huì)被忽略。

前言

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

問(wèn)題

這周在寫代碼的時(shí)候,聽(tīng)同事在說(shuō)箭頭函數(shù)無(wú)法更改this的指向,并且使用下面代碼進(jìn)行驗(yàn)證:

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

var obj2 = {
  a: 2
}
obj2.fn = obj1.fn
obj2.fn() // 結(jié)果:0
// (2)不使用箭頭函數(shù),this的指向會(huì)更改
var obj3 = {
  a: 3,
  fn: function() { console.log(this.a) }
}
obj3.fn() // 結(jié)果:3

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

然而,這種說(shuō)法是有問(wèn)題(我認(rèn)為)。

先理解this

this代表什么取決于:

  1. 調(diào)用位置
  2. 四種綁定規(guī)則
var a = 0
test() // 調(diào)用位置在此,通過(guò)【默認(rèn)綁定規(guī)則】,可知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() // 調(diào)用位置在此,通過(guò)【隱式綁定規(guī)則】,可知fn中的this綁定到了obj1上
  var obj2 = {
    a: 2
  }
  obj2.fn = obj1.fn
  obj2.fn() // 調(diào)用位置在此,【隱式綁定規(guī)則】,可知fn內(nèi)的this綁定到了obj2
}

箭頭函數(shù)中的this

其實(shí)這么起標(biāo)題不太準(zhǔn)確(然而想不出好的名字),因?yàn)榧^函數(shù)是不會(huì)創(chuàng)建自己的this的(MDN),那么下面代碼的this是來(lái)源于哪里的呢?

var obj3 = {
  a: 3,
  fn: () => {
    console.log(this.a)
  }
}
obj3.fn() // 調(diào)用位置在此,this指向window
arrowFoo1() // (1)此處是調(diào)用位置,使用【默認(rèn)的綁定規(guī)則】,this = window
function arrowFoo1() {
  var obj1 = {
    vv: 'svv1',
    fn: () => {
      console.log(this.vv, 'vv的值是')
    }
  }
  // (2)調(diào)用位置是此處,若fn不是箭頭函數(shù),那么這里也會(huì)有自己的this(即【隱式調(diào)用規(guī)則】,this綁定為obj1),而fn是箭頭函數(shù),則它沒(méi)有this,那么fn內(nèi)部調(diào)用的this是誰(shuí)?
  // 這時(shí)候需要根據(jù)作用域的規(guī)則,往外層查找,找到哪里?找到調(diào)用obj1.fn的調(diào)用棧,即arrowFoo1函數(shù)的this,那么從(1)中可知,那個(gè)this指向的是window
  obj1.fn()
  var obj2 = {
    vv: 'svv2',
  }
  obj2.fn = obj1.fn
  obj2.fn()
}
function arrowFoo2() {
  var vv = '哦哦哦哦哦'
  console.log(this.vv, 'vv的值是')
}

因此,箭頭函數(shù)里面要是用到了this,那么其實(shí)它是通過(guò)作用域鏈,往外進(jìn)行查找的,找到了就直接返回咯。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 網(wǎng)站頁(yè)面自動(dòng)跳轉(zhuǎn)實(shí)現(xiàn)方法PHP、JSP(上)

    網(wǎng)站頁(yè)面自動(dòng)跳轉(zhuǎn)實(shí)現(xiàn)方法PHP、JSP(上)

    自動(dòng)轉(zhuǎn)向,也叫自動(dòng)重定向。自動(dòng)跳轉(zhuǎn),指當(dāng)訪問(wèn)用戶登陸到某網(wǎng)站時(shí),自動(dòng)將用戶轉(zhuǎn)向其它網(wǎng)頁(yè)地址的一種技術(shù)。轉(zhuǎn)向的網(wǎng)頁(yè)地址可以是網(wǎng)站內(nèi)的其它網(wǎng)頁(yè),也可以是其它網(wǎng)站。
    2010-08-08
  • Javascript數(shù)組的排序 sort()方法和reverse()方法

    Javascript數(shù)組的排序 sort()方法和reverse()方法

    JavaScript提供了sort()方法和reverse()方法,使得我們可以簡(jiǎn)單的對(duì)數(shù)組進(jìn)行排序操作和逆序操作
    2012-06-06
  • JS實(shí)現(xiàn)導(dǎo)航欄樓層特效

    JS實(shí)現(xiàn)導(dǎo)航欄樓層特效

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)導(dǎo)航欄樓層特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • 使用JavaScript實(shí)現(xiàn)簡(jiǎn)單圖像放大鏡效果

    使用JavaScript實(shí)現(xiàn)簡(jiǎn)單圖像放大鏡效果

    圖像放大鏡在很多網(wǎng)站中都扮演著重要的角色,大多數(shù)開(kāi)發(fā)人員使用?jquery?來(lái)創(chuàng)建圖像放大鏡。在本教程中,我將向大家展示如何使用?HTML、CSS?和?JavaScript?制作一個(gè)簡(jiǎn)單的圖像放大鏡,需要的可以參考一下
    2022-08-08
  • JavaScript頁(yè)面實(shí)時(shí)顯示當(dāng)前時(shí)間實(shí)例代碼

    JavaScript頁(yè)面實(shí)時(shí)顯示當(dāng)前時(shí)間實(shí)例代碼

    最近因?yàn)轫?xiàng)目需要,有個(gè)需求是讓實(shí)時(shí)顯示當(dāng)前時(shí)間,然后想想這不簡(jiǎn)單嗎,自己就動(dòng)手敲代碼,但是發(fā)現(xiàn)一個(gè)問(wèn)題,通過(guò)getMonth()得到月份,總是會(huì)比當(dāng)前月份少1,深深覺(jué)得實(shí)踐出真知啊…之前覺(jué)得Date對(duì)象挺簡(jiǎn)單的,有很多細(xì)節(jié)都沒(méi)有注意。下面這篇文章就給大家詳細(xì)介紹下。
    2016-10-10
  • 又一款js時(shí)鐘!transform實(shí)現(xiàn)時(shí)鐘效果

    又一款js時(shí)鐘!transform實(shí)現(xiàn)時(shí)鐘效果

    又一款js時(shí)鐘!這篇文章主要為大家詳細(xì)介紹了transform實(shí)現(xiàn)的時(shí)鐘效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 將html頁(yè)面保存成圖片,圖片寫入pdf的實(shí)現(xiàn)方法(推薦)

    將html頁(yè)面保存成圖片,圖片寫入pdf的實(shí)現(xiàn)方法(推薦)

    下面小編就為大家?guī)?lái)一篇將html頁(yè)面保存成圖片,圖片寫入pdf的實(shí)現(xiàn)方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09
  • layui form表單提交之后重新加載數(shù)據(jù)表格的方法

    layui form表單提交之后重新加載數(shù)據(jù)表格的方法

    今天小編就為大家分享一篇layui form表單提交之后重新加載數(shù)據(jù)表格的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • 微信小程序tab左右滑動(dòng)切換功能的實(shí)現(xiàn)代碼

    微信小程序tab左右滑動(dòng)切換功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了微信小程序tab左右滑動(dòng)切換功能的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • javascript object array方法使用詳解

    javascript object array方法使用詳解

    在javascript開(kāi)發(fā)中經(jīng)常會(huì)使用到array中方法,本文將對(duì)其一一詳細(xì)介紹,需要了解的朋友可以參考下
    2012-12-12

最新評(píng)論

诸暨市| 普定县| 漳浦县| 东至县| 南召县| 秦皇岛市| 抚州市| 新蔡县| 东山县| 高邮市| 瑞昌市| 青川县| 阿克苏市| 南平市| 寿阳县| 大荔县| 平定县| 昌黎县| 昭平县| 揭东县| 祁阳县| 桃江县| 荆州市| 富顺县| 古交市| 浦北县| 公安县| 平利县| 六盘水市| 蒙山县| 泰安市| 巴林右旗| 贞丰县| 成安县| 南丰县| 宝兴县| 文安县| 南阳市| 瓦房店市| 广东省| 奉节县|