• 关于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 是能够挂上去的
  • 相关阅读:
    Mysql开启日志
    amfphp传递负数的bug
    linux /var/spool/clientmqueue 目录占大量空间
    WinXP SSH连接不上虚拟机的解决方法
    批量数据替换助手V1.0版发布
    也谈反射的应用场景
    反射+特性打造简洁的AJAX调用
    文本处理之利器正则表达式闪亮登场
    关于缩略图的生成与访问策略的一些经验分享
    装饰模式个人的一些理解
  • 原文地址:https://www.cnblogs.com/can-i-do/p/7326612.html
Copyright © 2020-2023  润新知