箭头函数和this指向

2021-12-23 17:30:31 浏览数 (1)

箭头函数基本使用
代码语言:javascript复制
// 箭头函数: 也是一种定义函数的方式
  // 1.定义函数的方式: function
  const aaa = function () {

  }

  // 2.对象字面量中定义函数
  const obj = {
    bbb() {

    }
  }

  // 3.ES6中的箭头函数
  // const ccc = (参数列表) => {
  //
  // }
  const ccc = () => {

  }
带返回值的箭头函数
代码语言:javascript复制
// 1.参数问题:
  // 1.1.放入两个参数
  const sum = (num1, num2) => {
    return num1   num2
  }

  // 1.2.放入一个参数
  const power = num => {
    return num * num
  }

  // 2.函数中
  // 2.1.函数代码块中有多行代码时
  const test = () => {
    // 1.打印Hello World
    console.log('Hello World');

    // 2.打印Hello Vuejs
    console.log('Hello Vuejs');
  }

  // 2.2.函数代码块中只有一行代码
  // const mul = (num1, num2) => {
  //   return num1   num2
  // }
  const mul = (num1, num2) => num1 * num2
  console.log(mul(20, 30));

  // const demo = () => {
  //   console.log('Hello Demo');
  // }
  const demo = () => console.log('Hello Demo')
  console.log(demo());
什么时候使用箭头

一般我我们准备把一个函数作为参数放在另外一个函数里的时候使用. 比如

代码语言:javascript复制
setTimeout(function () {
    console.log(this);//打印的this是window
  }, 1000)
代码语言:javascript复制
 setTimeout(function () {
    console.log(this);//打印的this是window
  }, 1000)
 
  setTimeout(() => {
    console.log(this);//打印的this是window
  }, 1000)

//setTimeout(function () 
//{这种结构其实默认第一个参数是window,所以函数体内向外找到的第一个作用域是window
  const obj = {
    aaa() {
      setTimeout(function () {
        console.log(this); // 打印的this是window
      })
 
      setTimeout(() => {
        console.log(this); //打印的this是 obj对象
      })
    }
  }
 
  obj.aaa()

箭头函数中的this是如何查找的? 答案: 向外逐层查找最近作用域的this.

代码语言:javascript复制
  const obj = {
    aaa() {
      setTimeout(function () {
        setTimeout(function () {
          console.log(this); // window
        })

        setTimeout(() => {
          console.log(this); // window
        })
      })

      setTimeout(() => {
        setTimeout(function () {
          console.log(this); // window
        })

        setTimeout(() => {
          console.log(this); // obj
        })
      })
    }
  }

  obj.aaa()

0 人点赞