今天就跟大家聊聊有關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。
打開瀏覽器驗證一下,沒問題 一個2明晃晃的在那里。
那么就這樣結束了嗎?
如果你學過node,現在用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指向了window,而全局的this也是指向了window
2、打印nodeJs中的this
發現了吧。函數中的this指向了Object [global]。
當我們給函數this賦值時,其實它掛靠在global對象上。所以它不會去改變全局中this的值
那么看看為什么會這樣
首先我們得去了解nodeJs的工作原理
瀏覽器直接在全局范圍執行的腳本文件
而在Node中,Node將代碼隱藏在一個立即被調用的匿名函數,你可以使用global來訪問全局范圍
在之前的解釋中,我們會發現在外部打印的一個this,它指向了一個空對象{},其實在node中運行的任何文件其實都被包裹在一個{}中,所以腳本文件都在自己的閉包中執行, 類似于下面這樣
{ (function(){ //腳本文件 })() }
在之前的例子中,函數的外面this指向的是一個空對象{},而在函數內部的this沒有指定的執行上下文,所以它指向了global對象-(可以訪問該匿名函數執行上下文的全局范圍)
看完上述內容,你們對this關鍵字在NodeJS和瀏覽器中有什么區別有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。