溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

this關(guān)鍵字在NodeJS和瀏覽器中有什么區(qū)別

發(fā)布時(shí)間:2021-03-03 15:26:10 來源:億速云 閱讀:168 作者:Leah 欄目:開發(fā)技術(shù)

今天就跟大家聊聊有關(guān)this關(guān)鍵字在NodeJS和瀏覽器中有什么區(qū)別,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

var type = 1
function toWhere(){
	this.type = 2;
}
toWhere();
console.log(type)

你們肯定會(huì)這樣想:

這里聲明了一個(gè)全局變量type,當(dāng)執(zhí)行type=1的時(shí)候,賦值為1。之后toWhere函數(shù)調(diào)用,看到函數(shù)中有this 就去判斷this的指向,這里很清楚,this指向了window,this.type=2執(zhí)行后,全局變量type就賦值為2了。

最后打印全局變量type 結(jié)果很明顯是2。

this關(guān)鍵字在NodeJS和瀏覽器中有什么區(qū)別

打開瀏覽器驗(yàn)證一下,沒問題 一個(gè)2明晃晃的在那里。

那么就這樣結(jié)束了嗎?

如果你學(xué)過node,現(xiàn)在用nodejs重新執(zhí)行一下以上代碼,你就發(fā)現(xiàn)了不一樣的地方。

this關(guān)鍵字在NodeJS和瀏覽器中有什么區(qū)別

你現(xiàn)在發(fā)現(xiàn) 那個(gè)1怎么這么不對(duì)勁呢,不是等于2嗎?

相關(guān)調(diào)試

從以上的例子可以看到,相同的js代碼在瀏覽器中運(yùn)行和在nodejs中運(yùn)行結(jié)果變得不一樣了。

這其實(shí)是因?yàn)閠his指向問題,但是這個(gè)指向和我們通常認(rèn)知中的指向是不一樣的。這個(gè)指向問題是由于node工作原理造成的

var type = 1
function toWhere() {
 this.type = 2
 console.log("函數(shù)中this指向",this)
}
toWhere()
console.log(type)
console.log("全局中this",this)

1、打印瀏覽器中的this

this關(guān)鍵字在NodeJS和瀏覽器中有什么區(qū)別

函數(shù)中this指向了window,而全局的this也是指向了window

2、打印nodeJs中的this

this關(guān)鍵字在NodeJS和瀏覽器中有什么區(qū)別

發(fā)現(xiàn)了吧。函數(shù)中的this指向了Object [global]。

當(dāng)我們給函數(shù)this賦值時(shí),其實(shí)它掛靠在global對(duì)象上。所以它不會(huì)去改變?nèi)种衪his的值

Node原理解析

那么看看為什么會(huì)這樣

首先我們得去了解nodeJs的工作原理

瀏覽器直接在全局范圍執(zhí)行的腳本文件

而在Node中,Node將代碼隱藏在一個(gè)立即被調(diào)用的匿名函數(shù),你可以使用global來訪問全局范圍

在之前的解釋中,我們會(huì)發(fā)現(xiàn)在外部打印的一個(gè)this,它指向了一個(gè)空對(duì)象{},其實(shí)在node中運(yùn)行的任何文件其實(shí)都被包裹在一個(gè){}中,所以腳本文件都在自己的閉包中執(zhí)行, 類似于下面這樣

{
	(function(){
		//腳本文件
	})()
}

在之前的例子中,函數(shù)的外面this指向的是一個(gè)空對(duì)象{},而在函數(shù)內(nèi)部的this沒有指定的執(zhí)行上下文,所以它指向了global對(duì)象-(可以訪問該匿名函數(shù)執(zhí)行上下文的全局范圍)

看完上述內(nèi)容,你們對(duì)this關(guān)鍵字在NodeJS和瀏覽器中有什么區(qū)別有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI