关于node中的global,箭头函数的this的一个小问题
this一直是一个JS中的困扰问题,这次在跑JS精粹的代码的时候顺带发现了Node里面全局变量的问题
var x = 1;
var myObj = {
x: 2
};
myObj.func = function() {
var print = function() {
console.log("this.x is:"+this.x); //undefined
}
print();
}
myObj.func();
如果上面的这句话,跑在浏览器中,最后输出的会是 this.x is: 1。
如果这句话跑在 Node.js 的环境中,最后输出 'this.x is: undefined`。
这都来源于JS这门语言中设计的内容:this默认绑定的是全局。我们所能想到的合理的设计,应该是this绑定于函数内部,我指的是自动绑定在函数内部。
曾经的先人是这样解决问题的var that = this ,此后内部所有的this统一用that指代即可。
事情还没有结束,于是手贱的我干脆把function这个保留字换成箭头函数
let myObj={value:5};
myObj.double=()=>{
let that=this;
let helper=()=>{
console.log(that.value);
}
helper();
}
myObj.double(); // undefined
- 以上说明,箭头函数中的this不是我们所想象的那般,此处待更。
于是乎,诞生出了新的undefined!!根据生物学实验中的对照法,我们要区别对照组和实验组,作为对照组的使用 function 保留字来做的已证是正确的,接下来看看我们的实验组
var value=88;
var myObj={value:5};
myObj.double=function(){
var helper=function(){
console.log(this.value); // undefined
console.log(this===global); // true
}
helper();
}
myObj.double();
console.log(global.value); //也就是说上方的value并不属于global
上面证明了什么呢??
- 我们在node环境下,用 var 声明的变量并没有挂载在global对象中。 (那么它会挂载哪里?会挂载那个.js文件里面。那么怎么挂在node.js里面呢?此处待更)
- 当前文件中的this确实是指向全局对象的。与我们上文所说的JS机制还是一样的,只是环境不同的,还是那个尿性。
- 经过尝试发现要这样写
global.value=4是能够挂上去的
关于node中的global,箭头函数的this的一个小问题的更多相关文章
- js中this,箭头函数和普通函数
四种基本用法 1. 一般方法中,this代指全局对象 window 2. 作为对象方法调用,this代指当前对象 3. 作为构造函数调用,this 指代new 出的对象 function test() ...
- JS中generater和箭头函数
generater跟函数很像: function* fn(x){ yield x; yield x++; return x;} 如上所示,generater用function*定义,可以用yield返 ...
- node 中的global对象和process对象
官方文档:http://nodejs.cn/api/ 因为Node.js是运行在服务区端的JavaScript环境,服务器程序和浏览器程序相比,最大的特点是没有浏览器的安全限制了,而且,服务器程序必须 ...
- es6中的双箭头函数
原代码: const fetchPosts = subreddit => dispatch => { dispatch(requestPosts(subreddit)); return c ...
- ES6 箭头函数中的 this?你可能想多了(翻译)
箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...
- 普通函数跟箭头函数中this的指向问题
箭头函数和普通函数的区别如下. 普通函数:根据调用我的人(谁调用我,我的this就指向谁) 箭头函数:根据所在的环境(我再哪个环境中,this就指向谁) 一针见血式总结: 普通函数中的this: 1. ...
- => js 中箭头函数使用总结
箭头函数感性认识 箭头函数 是在es6 中添加的一种规范 x => x * x 相当于 function(x){return x*x} 箭头函数相当于 匿名函数, 简化了函数的定义. 语言的发展 ...
- ES6中箭头函数的作用
我们知道在ES6中,引入了箭头函数,其本质就是等同有ES5中的函数.类似于下面的写法: let test1=() => “abc”; let test2=() => { return “a ...
- 箭头函数中的this和普通函数中的this对比
ES6中新增了箭头函数这种语法,箭头函数以其简洁性和方便获取this的特性.下面来总结一下他们之间的区别: 普通函数下的this: 在普通函数中的this总是代表它的直接调用者,在默认情况下,this ...
随机推荐
- hdu2196 Computer待续
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #i ...
- 解决mysql 客户端连接问题
问题:在linux 上安装了mysql服务端,使用客户端连接时报错信息为:ERROR 1045 (28000): Access denied for user 'root'@'localhos ...
- 【转】 Pro Android学习笔记(六二):Preferences(6):header
目录(?)[-] 代码实现 header xml文件 在前面的例子,我们主要学习了PreferenceScreen的xml如何写,preference有哪些类型.在代码中,我们为了不提示warning ...
- Linux负载均衡软件之LVS
一. LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是linuxvirtualserver.org ...
- 如何将OpenTSDB源码导入eclipse
OpenTSDB的官网上介绍了如何将OpenTSDB源码导入eclipse,官方链接,但步骤超级繁琐,还有一个简便方法,下面以导入OpenTSDB2.0.0为例. 1. 下载OpenTSDB2.0.0 ...
- Python模块-requests(一)
requests不是python自带的,使用前需要安装 发送请求 HTTP请求类型有GET,POST,PUT,DELETE,HEAD和OPTIONS 使用requests发送请求的方法如下: > ...
- redis的 key string hash list set sorted set 常用的方法
redis 安装文件: http://blog.csdn.net/tangsilai/article/details/7477961 ============================== ...
- python fabric的安装与使用
背景:fabric主要执行远程的shell命令,包括文件的上传.下载,以及提示用户输入等辅助其它功能. 测试系统:ubuntu16 要求:python //系统有自带,ubuntu16 通常自带pyt ...
- ASP.NET Core 身份认证 (Identity、Authentication)
Authentication和Authorization 每每说到身份验证.认证的时候,总不免说提及一下这2个词.他们的看起来非常的相似,但实际上他们是不一样的. Authentication想要说明 ...
- TCP三次握手四次挥手原理
转自http://www.cnblogs.com/liuxiaoming/archive/2013/04/27/3047803.html TCP协议三次握手原理: 首先,给张图片,建立TCP三次握手的 ...