溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

this關鍵字在NodeJS和瀏覽器中有什么區別

發布時間:2021-03-03 15:26:10 來源:億速云 閱讀:188 作者:Leah 欄目:開發技術

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

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

你們肯定會這樣想:

這里聲明了一個全局變量type,當執行type=1的時候,賦值為1。之后toWhere函數調用,看到函數中有this 就去判斷this的指向,這里很清楚,this指向了window,this.type=2執行后,全局變量type就賦值為2了。

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

this關鍵字在NodeJS和瀏覽器中有什么區別

打開瀏覽器驗證一下,沒問題 一個2明晃晃的在那里。

那么就這樣結束了嗎?

如果你學過node,現在用nodejs重新執行一下以上代碼,你就發現了不一樣的地方。

this關鍵字在NodeJS和瀏覽器中有什么區別

你現在發現 那個1怎么這么不對勁呢,不是等于2嗎?

相關調試

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

這其實是因為this指向問題,但是這個指向和我們通常認知中的指向是不一樣的。這個指向問題是由于node工作原理造成的

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

1、打印瀏覽器中的this

this關鍵字在NodeJS和瀏覽器中有什么區別

函數中this指向了window,而全局的this也是指向了window

2、打印nodeJs中的this

this關鍵字在NodeJS和瀏覽器中有什么區別

發現了吧。函數中的this指向了Object [global]。

當我們給函數this賦值時,其實它掛靠在global對象上。所以它不會去改變全局中this的值

Node原理解析

那么看看為什么會這樣

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

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

而在Node中,Node將代碼隱藏在一個立即被調用的匿名函數,你可以使用global來訪問全局范圍

在之前的解釋中,我們會發現在外部打印的一個this,它指向了一個空對象{},其實在node中運行的任何文件其實都被包裹在一個{}中,所以腳本文件都在自己的閉包中執行, 類似于下面這樣

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

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

看完上述內容,你們對this關鍵字在NodeJS和瀏覽器中有什么區別有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女