亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

this為什么會(huì)為undefined?

Null / 2250人閱讀

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

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

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

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

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

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

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

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



三、回答

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

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



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

嚴(yán)格模式為什么對(duì)箭頭函數(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意味著這個(gè)this指是所在封閉函數(shù)中this,所以嚴(yán)格模式會(huì)自動(dòng)忽視use strict,所以this如下所示:



箭頭函數(shù)中,this指向運(yùn)行時(shí)所在的對(duì)象,而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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/106825.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    JeOam 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<