加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Nodejs和浏览器环境下this关键字有何不一样?

发布时间:2022-04-20 09:42:49 所属栏目:语言 来源:互联网
导读:Nodejs和浏览器中this关键字有何不同?很多朋友对于在this关键字在Nodejs和浏览器环境下的指向问题不是很清楚,接下来通过实例代码给大家详细接下一下。 var type = 1 function toWhere(){ this.type = 2; } toWhere(); console.log(type) 你们肯定会这样想
        Nodejs和浏览器中this关键字有何不同?很多朋友对于在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。
 
        从以上的例子可以看到,相同的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的值
 
        Node原理解析
        那么看看为什么会这样
 
        首先我们得去了解nodeJs的工作原理
 
浏览器直接在全局范围执行的脚本文件
 
而在Node中,Node将代码隐藏在一个立即被调用的匿名函数,你可以使用global来访问全局范围
 
        在之前的解释中,我们会发现在外部打印的一个this,它指向了一个空对象{},其实在node中运行的任何文件其实都被包裹在一个{}中,所以脚本文件都在自己的闭包中执行, 类似于下面这样。

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读