最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

NodeJS和瀏覽器中this關鍵字的不同之處

 更新時間:2021年03月03日 12:04:58   作者:Beatrix  
這篇文章主要給大家介紹了關于NodeJS和瀏覽器中this關鍵字不同的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

學習過JavaScript的人肯定清楚 處在不同環(huán)境下this的指向問題。那么看下面的代碼

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

你們肯定會這樣想:

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

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

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

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

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

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

相關調(diào)試

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

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

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

1、打印瀏覽器中的this

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

2、打印nodeJs中的this

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

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

Node原理解析

那么看看為什么會這樣

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

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

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

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

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

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

總結(jié)

到此這篇關于NodeJS和瀏覽器中this關鍵字不同之處的文章就介紹到這了,更多相關NodeJS 瀏覽器中this關鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

宁武县| 秦安县| 会东县| 吕梁市| 宝鸡市| 林州市| 白水县| 荔浦县| 班玛县| 舒城县| 嘉黎县| 盘锦市| 大庆市| 沂水县| 惠安县| 桂平市| 本溪| 桑植县| 甘泉县| 文化| 科技| 理塘县| 白水县| 潮州市| 陆良县| 邹平县| 上栗县| 敖汉旗| 葵青区| 桃园市| 鱼台县| 新田县| 平邑县| 读书| 长宁县| 丁青县| 越西县| 清流县| 凌云县| 郓城县| 封丘县|