zoukankan      html  css  js  c++  java
  • 箭头函数和普通函数的this指向问题

    1. 箭头函数和function的不同:箭头函数的作用域一直都是定义的作用域,不会改变;function的作用域由调用的时候决定
      var obj = {
        b: 123,
        fun: function(){
          console.log(this.b);
        }
      }
      
      obj.fun(); //123
      let func = obj.fun;
      func(); //undefined
      var obj = {
        b: 123,
        fun: ()=>{
          console.log(this.b);
        }
      }
      
      obj.fun(); //undefined
      let func = obj.fun;
      func(); //undefined

      上面输出undefined的函数中,this指向为window(当定义在全局的时候)

    2. 全局定义的一个变量,在node环境和浏览器环境下有什么不同

      //浏览器环境
      var a = 123;
      console.log(a); //123
      console.log(this.a); //123
      console.log(window.a); //123
      //node环境
      console.log(a); //123
      console.log(this.a); //undefined
      console.log(global.a); //undefined

      node中的this是一个Object对象。

    3. 我们知道node中是存在模块化概念的,所以每一个模块里面的作用域包括this都是不公用的,只有global是全局的。(注意我们的方法使用的箭头函数,如果是function的话,那this指向的就是暴露出的num了)
      //num.js
      this.num = 1;
      module.exports = {
          num: 0,
          add: () => {
              console.log(this); //Object {num: 1}
              this.num++;  //这里的this指向的是??
          }
      }
      //main.js
      const s = require("./num");
      
      this.num=0;
      s.add();
      console.log(this); //Object {num: 0}

      执行main.js,调用s.add()函数,里面的this指向就是文件num.js里面的this

  • 相关阅读:
    linux下虚拟机virtualbox USB设备设置
    位带操作
    带通滤波器
    滞回比较器
    warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.
    汇编指令速查
    Win32汇编基础1
    第一个win32汇编程序开发步骤
    使用BIOS进行键盘输入和磁盘读写(学习汇编)
    直接定址表(学习汇编)
  • 原文地址:https://www.cnblogs.com/longlongdan/p/11698755.html
Copyright © 2011-2022 走看看