最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • this关键字在NodeJS和浏览器中的不同

    正文概述 掘金(Beatrix)   2021-03-02   743

    前言

    学习过JavaScript的人肯定清楚 处在不同环境下this的指向问题。那么看下面的代码

    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)
    

    this关键字在NodeJS和浏览器中的不同

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

    this关键字在NodeJS和浏览器中的不同

    发现了吧。函数中的this指向了Object [global]

    当我们给函数this赋值时,其实它挂靠在global对象上。所以它不会去改变全局中this的值

    Node原理解析

    那么看看为什么会这样

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

    在之前的解释中,我们会发现在外部打印的一个this,它指向了一个空对象{},其实在node中运行的任何文件其实都被包裹在一个{}中,所以脚本文件都在自己的闭包中执行, 类似于下面这样

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

    在之前的例子中,函数的外面this指向的是一个空对象{},而在函数内部的this没有指定的执行上下文,所以它指向了global对象-(可以访问该匿名函数执行上下文的全局范围)


    起源地下载网 » this关键字在NodeJS和浏览器中的不同

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元