关于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 ...
随机推荐
- uva1160 易爆物
#include<iostream>#include<cstdio>#include<algorithm>#include<cstdlib>using ...
- BestCoder Round #92 比赛记录
上午考完试后看到了晚上的BestCoder比赛,全机房都来参加 感觉压力好大啊QAQ,要被虐了. 7:00 比赛开始了,迅速点进了T1 大呼这好水啊!告诉了同桌怎么看中文题面 然后就开始码码码,4分1 ...
- 51nod 1450 闯关游戏——期望dp
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1450 想了半天,不知道不能走的状态(即最后不足m个的状态)怎么办. ...
- DataGrid 支持字符截断显示
DataGrid支持截断时, 需要分2部分, DataGridColumnHeader和DataGridCell. 1)创建上述2部分的ControlTemplate . 2)把其中的ContentP ...
- Erlang generic standard behaviours -- gen_server noblock call
在Erlang 系统中,经常需要gen_server 进程来处理共享性的数据,也就是总希望一个gen_server 进程来为多个普通进程提供某种通用性的服务,这也是gen_server 设计的初衷.但 ...
- logback 相关
%logger{36} 表示logger名字最长36个字符,否则按照句点分割. %X{key} to get the value that are stored in the MDC map ${lo ...
- Ruby环境搭建与“Hello World”
Ruby的环境搭建比较简单,在http://rubyinstaller.org/downloads/可以得到Ruby的安装包, 安装过程没什么问题.安装完成之后需要配置一下环境变量: 在PATH中填入 ...
- 杭电acm 1022题
Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot o ...
- 15、TSA数据上传(https://www.ncbi.nlm.nih.gov/genbank/tsaguide/#SP)
https://www.ncbi.nlm.nih.gov/genbank/tsa/ https://www.ncbi.nlm.nih.gov/genbank/tsaguide ...
- (转自精通Python设计模式)Python设计模式之创建型模式——2.建造者模式
建造者模式将一个复杂对象的构造过程与其表现分离,这样,同一个构造过程可用于创建多个不同的表现. 我们来看个实际的例子,假设我们想要创建一个HMTL页面生成器,HTML页面的基本结构(构造组件)通常是一 ...