关于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 是能够挂上去的
posted @ 2017-08-09 17:36  海客无心x  阅读(515)  评论(0编辑  收藏  举报