美文网首页
ES6中箭头函数及其this作用域总结

ES6中箭头函数及其this作用域总结

作者: 周星星的学习笔记 | 来源:发表于2020-12-20 19:00 被阅读0次

一、几种函数的定义方式及其使用

1.函数声明方式function字段关键字(命名函数)

//定义函数
function app() {
  console.log('Hello World')
}
//调用
app()

2.函数表达式(匿名函数)

//定义函数
const app = function() {
  console.log('Hello World')
}
//调用
app()
/***********************或者********************/
(function() {
  console.log('Hello World')
})()

3.new Function()

// 利用 new Function('参数1','参数2',...,'参数n','函数体');
//定义
var f = new Function('a','b','console.log(a+b)')
//调用
f(1,2)

4.箭头函数

1.不带参数

const app = () => {
  console.log('Hello World')
  console.log(123)
}
app()
//如果函数体内只有一行代码,可以简化成如下的形式
const app = () => console.log('Hello World')
app()

2.带多个参数

const app = (num1,num2) => {
  return num1 + num2
}
console.log(app(1,2))
//如果函数体内只有一行代码,可以简化成如下形式(有return语句,return可以省略)
const app = (num1,num2) => num1 + num2
console.log(app(1,2))

3.只带一个参数

const app = (param1) => {
  return 'Hello ,' + param1
}
console.log(app('zhouxingxing'))

//同样的,以上的函数因为只有一个参数,
//并且函数体内只有一行代码,所以可以可以简写成如下形式:
const app = param1 => 'Hello ,' + param1
console.log(app('zhouxingxing'))

//类似Vue里面的render函数的写法,大家就不陌生了吧
new Vue({
  el: '#app',
  router,
  render: h => h(App)
})
//实际上可以写成:
new Vue({
  el: '#app',
  router,
  render: (h) => {
    return h(App)
  }
})
//也可以写成:
new Vue({
  el: '#app',
  router,
  render: function(h) {
    return h(App)
  }
})
//也可以写成:
new Vue({
  el: '#app',
  router,
  render(h) {
     return h(App)
  }
})

二、箭头函数中this作用域与普通函数this作用域对比

1.案例一代码

const obj = {
  name:'zhouxingxing',
  hello() {
    //setTimeout的回调函数采用普通函数的形式
    setTimeout(function () {
      console.log(this)  //window对象
    })
    //setTimeout的回调函数采用箭头函数的形式
    setTimeout(() => {
      console.log(this)  //obj对象
    })
  }
}
obj.hello()

2.案例一测试结果


image.png

3.案例二代码

const obj = {
  name:'zhouxingxing',
  hello() {
    //setTimeout的回调函数采用普通函数的形式
    setTimeout(function () {
      setTimeout(function () {
        console.log(this) // window对象
      })
      setTimeout(() => {
        console.log(this) // window对象
      })
    })
    //setTimeout的回调函数采用箭头函数的形式
    setTimeout(() => {
      setTimeout(function () {
        console.log(this) // window对象
      })
      setTimeout(() => {
        console.log(this) // obj对象
      })
    })
  }
}
obj.hello()

4.案例二测试结果

image.png
5.总结结论
结论: 箭头函数中的this引用的是最近作用域中的this,也就是说箭头函数中如果有this的定义,这个时候它会向外层作用域中,一层一层查找this,直到找到this的定义。

三、备注

1.本文总结的来源:https://www.bilibili.com/video/BV15741177Eh?p=99,有兴趣的朋友可以看一下。

相关文章

  • 箭头函数

    箭头函数本身没有this, 由箭头函数声明时所处作用域决定。作用域(两个): ① 函数作用域 ② 全局作用域箭头函...

  • ES6中箭头函数及其this作用域总结

    一、几种函数的定义方式及其使用 1.函数声明方式function字段关键字(命名函数) 2.函数表达式(匿名函数)...

  • Day17 ES6 扉页

    常量 作用域ES3、5用立即执行函数控制作用域ES6用关键字语法let const形成块级作用域 箭头函数主要改变...

  • JScript语言——ES6(ES2015)

    ES6(ES2015)语法介绍 变量声明let、const 块级作用域 解构赋值 箭头函数清楚简写形式箭头函数的t...

  • 箭头函数

    箭头函数的产生有两个目的:更简洁的语法和父作用域共享关键字this 箭头函数基本用法 ES6中新增的=>来定义简单...

  • JavaScript块级作用域

    块作用域{ }JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称ES6)中...

  • JS—-this指向(二)

    箭头函数中this对象就是定义时所在的作用域,也就是说箭头函数本身没有this,内部的this就是外层代码块作用域...

  • JS基础知识(2) -- 作用域和作用域链

    作用域 作用域就是变量与函数的可访问范围 全局作用域 函数作用域 ES6块级作用域 ES5没有块级作用域,ES6有...

  • this

    在箭头函数中,就算是setTimeout()方法中,this指向的也是函数所在作用域的对象 非箭头函数中,this...

  • 无标题文章

    ES6 解构赋值const声明不可变变量,let块状作用域箭头函数 this指向上一个作用域2017快过去了,这一...

网友评论

      本文标题:ES6中箭头函数及其this作用域总结

      本文链接:https://www.haomeiwen.com/subject/jpuknktx.html