node的this和浏览器的this指向的区别

Nodejs中的this详解 以下内容都是关于在nodejs中的this而非javascript中的this,nodejs中的this和在浏览器中javascript中的this是不一样的。 在全局中的this console.log(this); {} this.num = 10; console.log(this.num); 10 console.log(global.num); undefined   全局中的this默认是一个空对象。并且在全局中this与global对象没有任何的关系,那么全局中的this究竟指向的是谁?在本章节后半部分我们会讲解。 在函数中的this function fn(){ th 立即下载

在node中,this指向和浏览器稍有不同。下边是我总结的一些内容:

node的全局对象和浏览器全局对象区别

js中声明一个没有var的变量,它会被作为全局对象的属性。

在浏览器中全局对象是window,所以使用window才能访问到:

//在浏览器环境执行
name = 'win'
console.log(window.name);   //输出win

在node中全局对象是global,所以自然就是它的属性咯~ 

//在node环境执行
name = 'node.js'
console.log(global.name);   //输出node.js

浏览器环境下this普通函数指向

普通函数的this总是指向调用该函数的对象。

最外层的对象就是windows。我们在最外层调用test()函数,所以test()的this也是win,故输出“win”。

//在浏览器执行
window.name = 'win'
function test(){
    console.log(this.name); //输出“win”
}
test();

 并且最外层的this就是windows 

//在浏览器执行
console.log(this === window); //输出“ture”

 所以我们可以写这样一个代码:

//在浏览器执行
this.name = 'win' //这种写法与windows.name=win等价

console.log(this === window); //输出“ture”

function test(){
    console.log(window === this); //输出“true”
    console.log(this.name); //输出“win”
}
test();

好了,以上就是在浏览器中函数指向this简谈。

node环境下this普通函数指向

看懂上边里的例子,我们会认为node只是把全局的的名字window换成了global。

并且看起来也是这样:

//在node环境执行
global.name = 'node.js'
function test(){
    console.log(this.name); //输出“node.js”
}
test();

可是,这不代表node中仅仅是把全局对象改名为global这么简单!

看下边这个例子:

//在node中执行
this.name = 'win' 

console.log(this === global); //输出"false”

function test(){
    console.log(this === global); //输出“true”
    console.log(this.name); //输出“undefined”
}
test();

也就是说,在最外层this不等于global,但是test函数的this依旧指向global。

这是因为在最外层的this并不是全局对象global。而是module.exports

关于module.export具体定义可以查看相关文章,这是es6的新特性。

console.log(module.exports === this); //输出“true”

总结:node中最外层this不等于全局作用域global。而且在最外层调用函数,将会使得函数指向global。

模板匹配加速之金字塔分层搜索 图像金字塔是一种多分辨率图像表示方法,它通过一系列逐渐缩小或放大的图像来表示原始图像的不同尺度。高斯金字塔(Gaussian Pyramid):通过不断下采样(降采样)生成更小的图像。拉普拉斯金字塔(Laplacian Pyramid):通过高斯金字塔和差分操作生成一组残差图像。在模板匹配中,我们主要使用高斯金字塔来实现多尺度匹配。金字塔灰度模板匹配通过多尺度搜索策略,在保持较高准确率的同时显著提升匹配速度,尤其适用于:高分辨率图像处理实时检测系统移动端设备等资源受限场景。 阅读详情

相关推荐

VIVADO网表文件DCP和EDF

为了便于模块化设计,同时保护自己的知识产权,Xilinx VIVADO 提供两种代码封装方法:DCP文件和edf文件。

u014035968的博客 1万+

nodejs中的this指针详解

//第一种情况,全局中的this指向的是module.exports。 console.log(this); //{} this.num = 10; console.log(this.num); //10 console.log(global.num); //undefined console.log(module.exports.num); //10 //第二种情况,

QIUCHUNHUIGE的博客 4297

逆向解析喜马拉雅新版xm-sign算法:从dws.1.6.8.js到签名生成

本文详细解析了喜马拉雅新版xm-sign算法的逆向破解方法。通过定位核心JS文件dws.1.6.8.js,构建本地Node.js模拟执行环境,并解密关键参数cid与appKey,最终实现签名算法的本地化稳定生成,为数据采集提供可靠解决方案。

weixin_29250403的博客 214

闭包详细介绍

一个函数内使用了外部的变量, 那这个函数和被使用的外部变量一起被称为闭包结构。在实际开发中,通常会再使用一个函数包裹住闭包结构,以起到对变量保护的作用。

cn33333的博客 459

Origin绘制带差异显著性标记的分组均值条形图|科研论文图表教程(附数据格式模板)

传统柱状图虽能呈现组间均值差异,却隐藏个体数据分布;散点图虽能展示原始数据,却难以直观凸显统计显著性。带差异显著性(*)的分组均值条形图——它以“双层叙事”的创新设计,同时呈现群体特征与个体差异。

weixin_50236590的博客 1497

TexGen模型导出到ABAQUS的inp文件:如何快速修改纱线材料属性(避坑指南)

本文针对TexGen模型导出到ABAQUS的inp文件后纱线材料属性缺失或错误的问题,提供了高效的解决方案。文章详细解析了inp文件结构,指导用户如何手动定位并修改纱线材料属性,并提供了可批量处理的Python脚本,帮助用户快速、精准地完成材料参数赋值,有效提升复合材料仿真工作效率。

ice55的博客 603

node(this)

nodethis

m0_73495603的博客 324

DEM边界数值爆炸?用ArcGIS空间分析工具链搞定异常值过滤全流程

本文针对DEM数据处理中常见的边界数值爆炸问题,提供了一套完整的ArcGIS空间分析解决方案。文章深入剖析了异常值产生的根源,并详细介绍了从诊断、定位到使用栅格计算器、重分类等工具进行精准过滤与修复的全流程工作流,帮助用户彻底解决由插值误差、数据拼接及坐标系转换引发的数值异常。

weixin_29269441的博客 149

node中的this指向

如果你想添加属性,必须以this.xx或者module.exports.xx或者exports.xx的形式添加。

我心坚持 343

AI上推荐 之 NeuralCF与PNN模型(改变特征交叉方式)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 1万+

DirectX function “GetDeviceRemovedReason“ failed with DXGI_ERROR_DEVICE_HUNG (“The GPU will not resp

游戏报错"DXGI_ERROR_DEVICE_HUNG"的解决方案 在使用RTX 40系显卡运行FIFA 23等游戏时,可能出现DirectX报错导致游戏崩溃。这主要由于最新显卡驱动与DirectX 12的兼容性问题。解决方法包括: 降级显卡驱动版本 修改游戏配置文件,将DIRECTX_SELECT设为1 在显卡控制面板中关闭垂直同步、抗锯齿、DLSS 3等功能 调整电源模式为性能优先 这些操作可以有效解决因驱动兼容性导致的游戏崩溃问题。

猿小白的博客 3893

彻底搞懂浏览器和node.js中的this指向问题!

主要说明了javaScript中的this指向

aa96cpv的博客 521

巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC

巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC

Rockyoung 8022

浏览器与Node 中的this

上午在复习闭包的时候,又看了一下阮一峰老师的那篇 学习Javascript闭包(Closure),内容不多,讲得也很清晰。但是最后的两个题目引发了较多的争议,看好多人评论说第一个题目实际上是this 指针的问题。于是亲自去实践下,再结合其他几篇文章,又跑去研究一下浏览器和Node 中的this 指针的问题,最终总结整理出一点东西,写在下面。 1. 两个题目 首先来看一下那两个题目,第一题: ...

少东的博客 1698

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【转载】JavaScript运行时:Node环境和浏览器环境的区别

两者区别主要表现在功能侧重不同,Node环境下的JS主要面向开发服务器,更加侧重业务逻辑开发,因而需要支持文件读写以及模块等特性来保证服务器功能正常及快速开发;而浏览器端的JS则侧重视图,需要大量操作DOM。两者还有别的一些区别。 以下是原文。 正好最近有朋友咨询我这个问题,那就简单谈一下我理解的Node环境和浏览器的区别,高手请略过。 一、全局环境下this的指向 在Node中this指向global,而在浏览器中this指向window,这就是为什么underscore中一上来就定义了一 root;

莫邪莫急的博客 2020

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

node环境和浏览器的区别

正好最近有朋友咨询我这个问题,那就简单谈一下我理解的node环境和浏览器的区别,高手请略过。 一、全局环境下this的指向   在node中this指向global而在浏览器中this指向window,这就是为什么underscore中一上来就定义了一 root; var root = typeof self == 'object' && self.self === sel...

xiaokanfuchen86的博客 1135

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

this指向的练习题

将x=1,y=1传到函数内部,moveX(x)相当于globa.moveX(1) ,moveY(y)同理;所以函数moveX,moveY中的this指代的是global,this.x=x相当于 global.x=1;1.首先看谁调用了方法, x()相当于是global.x(),所以第一个this.name指的是global.name;x()相当于window.x(),而 window.name指的就是全局变量的name。o.b.fn(),最近调用者是b,所以fn方法中的this指代的是b。

m0_55673399的博客 411

浏览器和Node事件循环的区别

Node对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。例如,在服务器环境中,处理二进制数据通常是必不可少的,但Javascript对此支持不足,因此,V8.Node增加了Buffer类,方便并且高效地 处理二进制数据。因为这些API是浏览器级别的封装,存javascript中是没有的。在浏览器中不同的浏览器厂商提供了不同的浏览器内核,浏览器依赖这些内核解释折我们编写的js。在nodeJS中提供了CMD的模块加载的API,如果你用过seaJS,那么应该上手很快。

subsistent的博客 203

关于Node和浏览器的不同

1.为什么它俩有必要比较? 1.因为它们都是使用javascript作为其编程语言 2.它们有什么不同点 1.全局下this的指向不同 浏览器下this指向window,nodejs中this指向global,所以window中封装的一些例如alert这些方法在nodejs中是无法使用的。 2.使用的引擎不一样; 不同的浏览器使用的引擎都是有差别的(所以应用会出现各种兼容性差异),但是Nodejs是基于谷歌的V8引擎的,引擎一致不管什么环境都不存在兼容性的问题。 3.javascript在浏览器中的主要作用

baidu_41604826的博客 1105

nodeJS 与 浏览器中的Javascript 的区别

nodeJS 与 浏览器中的Javascript 的区别 全局对象——window 与 global Javascript 是运行在浏览器上的脚本语言,在浏览器中,有一个顶级对象叫做window,它就是我们常说的全局对象。 可是在 nodeJS 中,由于 nodeJS 并非在浏览器中运行,而是在我们的服务器上跑,所以它有自己的全局对象,叫做global。 ????‍♂️:老师,我不信!证明给我看! ????‍????:别眨眼,看好咯 a = 1; console.log(window.a); 浏览器中

qq_35370002的博客 1013

Node.js常见面试题

因为所有的NodeJS文件在执行的时候都会被包裹到一个函数中,this都被修改为module.exports。(详细请看之前的Node模块原理分析【详细】那篇文章)。和浏览器中一样NodeJS中也有事件循环(Event Loop),但是由于代码执行的宿主环境和应用场景不同,所以两者的事件循环也有所不同。扩展阅读:在NodeJS中使用libuv实现了Event Loop。源码地址:https://github.com/libuv/libuv什么是包?

weixin_44767973的博客 8110

call/apply的第一个参数如果为null。this指向window

call/apply是用来改变函数的作用域的,第一次参数为this,第二个参数为传输的值,例如 var a ="windowA"; var b = "windowB"; var str = "str"; var myObject = {a:"myA",b:"myB"}; function hello(s){ alert("a=...

weixin_30551963的博客 412

Node环境和浏览器环境

对比node环境和浏览器环境的区别

k_5412528的博客 355

三种语言的区别

C语言和JavaScript语言的区别 java语言和JavaScript语言的区别 node和浏览器的区别

weixin_58732695的博客 773

call()、apply()、bind()方法的区别和相似点

call()、apply()、bind()方法的区别和相似点 一、切换函数执行的上下文环境(context),即 this 绑定的对象。 1.call() 方法是预定义的 JavaScript 方法。 2.apply() 方法接受数组形式的参数。编写用于不同对象的方法。 3.bind()方法主要就是将函数绑定到某个对象,bind()会创建一个函数, 函数体内的this对象的值会被绑定到传入bind()中的第一个参数的值, 例如:f.bind(obj),实际上可以理解为obj.f(),这时f函数体内的this

qq_42822993的博客 3438

python nodejs 爬虫_爬虫工程师也应该会的 NodeJS 知识(一)

NodeJS 是什么?Node.js 是基于 “ Chrome V8 引擎 ” 的 JavaScript 运行环境V8 引擎是一款专门解释和执行 JS 代码的虚拟机,任何程序只要集成了 V8 引擎都可以执行 JSNodeJS 不是一门编程语言,NodeJS 是一个运行环境 ,由于这个运行环境集成了 V8 引擎,所以在这个运行环境下可以运行我们编写的JS代码。这个运行环境最大的特点就是提供了操作 "...

weixin_39757122的博客 157
上一篇: 《node.js实战》第七章 (7.1—7.2.3) connect 自带的中间件
下一篇: 《node.js实战》第七章 (7.2.5—7.5) connect 自带的中间件
崔佳宇_
崔佳宇_ 优质创作者: 嵌入式与硬件开发技术领域 优质创作者: 嵌入式与硬件开发技术领域
博客等级 码龄10年 1万+粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值