成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

this為什么會為undefined?

Null / 2219人閱讀

摘要:一前言普通定義的函數(shù)運(yùn)行環(huán)境也是對象,指向運(yùn)行時所在的對象。箭頭函數(shù)函數(shù)體內(nèi)的對象,就是定義時所在的對象,而不是使用時所在的對象。

一、前言 普通function定義的函數(shù)

‘運(yùn)行環(huán)境’也是對象,this指向運(yùn)行時所在的對象。
如下:

如果一個函數(shù)在全局環(huán)境運(yùn)行,this就指向頂層對象(瀏覽器中為window對象);
如果一個函數(shù)作為某個對象的方法運(yùn)行,this就指向那個對象;
如果一個函數(shù)作為構(gòu)造函數(shù),this指向它的實(shí)例對象。
箭頭函數(shù)

函數(shù)體內(nèi)的this對象,就是定義時所在的對象,而不是使用時所在的對象。

本來記住這幾點(diǎn)已經(jīng)可以了,this最終找到是可能window,但是undefined是怎么又是怎么來的,本妹子下面將一步步分析。

二、問題點(diǎn):undefined是怎么來的

綜上所述,this指向運(yùn)行時所在的對象或指向定義時所在的對象,但是這個對象可能最后找到是window,但都不可能是undefined,那么undefined是怎么來的呢?



三、回答

我們一般寫js文件都是babel轉(zhuǎn)成ES6的,babel會自動給js文件上加上嚴(yán)格模式。

用了嚴(yán)格模式"use strict",嚴(yán)格模式下無法再意外創(chuàng)建全局變量
),所以this不為window而為undefined



四、進(jìn)階問題:嚴(yán)格模式對箭頭函數(shù)沒有效果

嚴(yán)格模式為什么對箭頭函數(shù)沒有效果,返回還是window?



五、進(jìn)階問題回答

Given that?this?comes from the surrounding lexical context,?strict mode?rules with regard to?this?are ignored.

lexical means that this refers to the this value of a lexically enclosing function.

綜上所述,在箭頭函數(shù)中,thislexical 類型,lexical意味著這個this指是所在封閉函數(shù)中this,所以嚴(yán)格模式會自動忽視use strict,所以this如下所示:



箭頭函數(shù)中,this指向運(yùn)行時所在的對象,而use strict被移到函數(shù)內(nèi)了,所以this為全局變量window

Happy coding ~~ ^ ^

相關(guān)鏈接
原文地址

嚴(yán)格模式 - JavaScript

Arrow functions - JavaScript

ECMAScript 2015 Language Specification – ECMA-262 6th Edition

函數(shù)的擴(kuò)展 - ECMAScript 6入門

use strict in javascript not working for fat arrow? - Stack Overflow

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/106825.html

相關(guān)文章

  • 深入javascript之執(zhí)行上下文

    摘要:在初始化代碼時會先進(jìn)入全局上下文中,每當(dāng)一個函數(shù)被調(diào)用時就會為該函數(shù)創(chuàng)建一個執(zhí)行上下文,每個函數(shù)都有自己的執(zhí)行上下文。來看一段代碼這段代碼有個執(zhí)行上下文全局上下文和,,屬于自己的執(zhí)行上下文。 聊聊js的執(zhí)行上下文 一,相關(guān)概念 EC : 執(zhí)行上下文ECS : 執(zhí)行環(huán)境棧VO : 變量對象AO : 活動對象scope chain :作用域鏈 二,執(zhí)行上下文 javascript運(yùn)行的代碼...

    ky0ncheng 評論0 收藏0
  • 深入理解Javascript中的執(zhí)行環(huán)境(Execution Context)和執(zhí)行棧(Execut

    摘要:引擎會執(zhí)行其執(zhí)行環(huán)境位于堆棧頂部的函數(shù)。當(dāng)函數(shù)執(zhí)行完畢時,當(dāng)前執(zhí)行棧會從堆棧中彈出去,并且控件將會到達(dá)其在當(dāng)前堆棧下面的那個執(zhí)行環(huán)境中。當(dāng)完成以后,它的執(zhí)行環(huán)境會會從堆棧中移出,并且控件會到達(dá)全局執(zhí)行環(huán)境。 如果你想成為一個Javascript開發(fā)者,那么你一定要知道Javascript程序的內(nèi)部運(yùn)行原理。理解執(zhí)行環(huán)境和執(zhí)行棧是非常重要的,其有助于理解其他Javascript的概念,比...

    whidy 評論0 收藏0
  • javascript的執(zhí)行上下文

    摘要:運(yùn)行執(zhí)行上下文正在使用的執(zhí)行上下文。頂部是正在執(zhí)行的上下文當(dāng)執(zhí)行完畢,它的執(zhí)行上下文自動從棧彈出,控制流程按順序到達(dá)全局執(zhí)行上下文。一旦所有代碼執(zhí)行完畢,引擎從當(dāng)前棧中移除全局執(zhí)行上下文。在全局執(zhí)行上下文中,的值指向全局對象。 https://juejin.im/post/5ba321...https://juejin.im/entry/59986...我只是搬運(yùn)工,看了他們的文章后深...

    yedf 評論0 收藏0
  • [譯]了解Javascript中的執(zhí)行上下文和執(zhí)行堆棧

    摘要:理解執(zhí)行上下文和執(zhí)行堆棧對于理解的其它概念如提升,范圍和閉包至關(guān)重要。正確地理解執(zhí)行上下文和執(zhí)行堆棧將幫助你更好地使用開發(fā)應(yīng)用。引擎執(zhí)行位于執(zhí)行堆棧頂部的方法。當(dāng)調(diào)用時,為該函數(shù)創(chuàng)建一個新的執(zhí)行上下文,并且把它推入到當(dāng)前執(zhí)行堆棧。 By Sukhjinder Arora | Aug 28, 2018 原文 如果你是或者你想要成為一名js開發(fā)者,那么你必須了解js程序內(nèi)部的運(yùn)作。理解執(zhí)行...

    qujian 評論0 收藏0
  • 解密JavaScript執(zhí)行上下文

    摘要:執(zhí)行上下文棧首先我們先了解一下什么是執(zhí)行上下文棧。那么隨著我們的執(zhí)行上下文數(shù)量的增加,引擎又如何去管理這些執(zhí)行上下文呢這時便有了執(zhí)行上下文棧。這樣由多個執(zhí)行上下文的變量對象構(gòu)成的鏈表就叫做作用域鏈。 執(zhí)行上下文棧 首先我們先了解一下什么是執(zhí)行上下文棧(Execution context stack)。 showImg(https://segmentfault.com/img/remot...

    JeOam 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<