箭头函数的语法

  function fn1() {
console.log(1);
} let fn2 = () => {
console.log(2);
}
fn1()//1
fn2()//2 //箭头函数: 形参=>返回值
//单个形参的最简写法,箭头函数作为匿名的回调函数是可以省略let fn ,既(形参)=>{语句}
let fn = nub => nub * 2
console.log(fn(10));//20 //多个形参,语句单一。(形参1,形参2)=>返回值
let fn = (num1, num2, num3) => num1 * num2 * num3
console.log(fn(2, 3, 4))//24 //多个形参,多条语句,不加return返回undefined
let fn = (num1, num2, num3) => { let a = num1 + num2; let b = num1 + num3 ;console.log(a + b)}
console.log(fn(2, 3, 4))//报错undefined,与普通函数的没有return的值相同都是undefined //多个形参,多条语句,必须用return返回函数值
let fn = (num1, num2, num3) => { let a = num1 + num2; let b = num1 + num3 ;return(a + b)}
console.log(fn(2, 3, 4))//11

箭头函数的不定参

不定参对应普通函数的arguments

         function fn1() {
console.log(arguments);
}
fn1(1, 2, 3, 4)//伪数组arguments[1,2,3,4] let fn2 = () => {
console.log(arguments);
}
fn2(1, 2, 3, 4)//arguments is not defined,也就是箭头函数没有不定参 //解决剩余参数的方法
let fn3 = (a, b, ...c) => {
console.log(a, b, c)
}
fn3(1, 2, 3, 4)//1,2,[3,4],剩余参数以数组保存 let fn3 = (a, b, ...c) => {
console.log(c[0])
}
fn3(1, 2, 3, 4)//3,注意剩余参数以Array[3,4]进行保存

箭头函数的this的指向

		//本质,箭头函数的this在定义时所在的对象,其实质是因为箭头函数没有自己的this,用的是外层的this
function fn1() {
console.log(this);
}
fn1()//window let fn2 = () => {
console.log(this);
}
fn2()//window,箭头函数本身没有this指向,在调用时指向其声明时所在作用域,这里声明在全局作用域下所以指向window //在点击事件中
document.onclick = function () {
let fn = () => { console.log(this) }
fn()//this指向#document,指向调用时的作用域
} //深入理解
let fn
let fn2 = function () {
console.log(this);
fn = () => { console.log(this) }
}
fn2()//先调用fn2为了给fn赋值为函数,全局函数this打印结果是指向window
fn()//箭头函数调用时应指向声明所在的作用域,fn声明在fn2中,所以指向与fn2相同 //深入理解--变形
let fn
let fn2 = function () {
console.log(this);
fn = () => { console.log(this) }
}
fn2 = fn2.bind(document.body)//先调用fn2为了给fn赋值为函数
fn2()//body
fn()//body

ES6中的箭头函数的语法、指向、不定参数的更多相关文章

  1. 前端项目中常用es6知识总结 -- 箭头函数及this指向、尾调用优化

    项目开发中一些常用的es6知识,主要是为以后分享小程序开发.node+koa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫. 项目开发常用es6介绍 1.块级作用域 let const 2. ...

  2. ES6中的箭头函数

    关于函数表达式中的this:自动引用正在调用当前方法的.前的对象1.obj.fun()中的this fun中的this -> obj2.new Fun() Fun中的this -> 正在创 ...

  3. ES6中的箭头函数与普通函数的区别

    箭头函数与普通函数的区别 1.语法上更加简洁.清晰 基本语法: // 关于箭头函数的参数 // 如果箭头函数没有参数,直接写一个括号即可 let fun1 = () => { console.l ...

  4. es6中的(=>)箭头函数

    x => x * x 上面的箭头函数相当于: function (x) { return x * x; } 箭头函数相当于匿名函数,并且简化了函数定义. 箭头函数有两种格式,一种像上面的,只包含 ...

  5. ES6中的箭头函数和普通函数有什么区别?

    1.普通函数中的this总是指向调用它的那个对象, 箭头函数没有自己的this,他的this永远指向其定义环境,任何方法都改变不了其指向,如call().bind().apply().(正是因为它没有 ...

  6. JS ES6中的箭头函数(Arrow Functions)使用

    转载这篇ES6的箭头函数方便自己查阅. ES6可以使用“箭头”(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器). 一.语法 基础语法 (参数1, 参数2, …, 参数N) => ...

  7. ES6——>let,箭头函数,this指向小记

    let let允许你声明一个作用域被限制在块级中的变量.语句或者表达式. 还是那个经典的问题:创建5个li,点击不同的li能够打印出当前li的序号. 如果在for循环中使用**var**来声明变量i的 ...

  8. 聊聊 ES6 中的箭头函数

    首先来两点: 当只有一个参数的时候,那么 () 可以省略 当只有一个 return 的时候,那么 {} 可以省略 当函数体内只有一条语句的时候,那么 {} 也可以省略 下面来几个简单的例子来对比 ES ...

  9. 箭头函数以及this指向问题

    一.定义函数的方式 //1.function const aaa = function () { } //2.对象字面量中定义函数 const obj = { bbb() { } } //3.ES6中 ...

随机推荐

  1. Dynamics CRM 在表单上显示更改历史记录(审核历史记录)

    前言 虽然Dynamics CRM自带的审计很好,但是对于缺乏使用CRM经验的用户来说,自带的UCI界面实在是太隐藏了: 于是乎就出现了需求:想通过在表单上直接看到看审计历史记录: 在网上搜索了很多中 ...

  2. Docker安装完成后启动报错:Failed to start Docker Application Container Engine

    报错如下:显示没有启动 先关闭防火墙:防火墙关闭指令请看  <a href="Linux防火墙篇">https://www.cnblogs.com/szx666/p/1 ...

  3. && 与 || 差在哪?-- Shell十三问<第十问>

    && 与 || 差在哪?-- Shell十三问<第十问> 好不容易,进入两位数的章节了... 一路走来,很辛苦吧?也很快乐吧? 在解答本章题目之前,先让我们了解一个概念:r ...

  4. Linux 常用系统性能命令总结

    Linux 常用系统性能命令 查看系统负载top,free **w/uptime  ** 最后面三个数字表示1分钟,5分钟,15分钟平均有多少个进程占用CPU占用CPU的进程可以是Running,也可 ...

  5. [贪心]D. 【例题4】国王游戏

    D . [ 例 题 4 ] 国 王 游 戏 D. [例题4]国王游戏 D.[例题4]国王游戏 解析 贪心思想,考虑交换后的值比交换前的小. 然后数据规模用高精度 Code #include <b ...

  6. Spring Cloud Alibaba(2)---Nacos概述

    Spring Cloud Alibaba(2)---nacos概述 上一篇博客讲了有关 SpringCloudAlibaba的概述,这篇开始讲SpringCloudAlibaba组件之一---Naco ...

  7. 记一次在virtualbox中安装windows7遇到增强功能安装分辨率的问题

    在windows7中遇到很多次安装好增强功能后并不能对其实现放大分辨率,使其跟随虚拟机界面大小而改变. 经过许多次的安装和恢复快照,发现了在设置中,显存的大小一直都是处于边缘的状态, 关闭虚拟机后,我 ...

  8. OrchardCore 如何动态加载模块?

    前言 今天,我们再次讨论下OrchardCore,通过初期调研,我们项目采用OrchardCore底层设施支持模块化,同时根据业务场景,额外还需支持二次开发,于是有了本文,若有不同解决方案,欢迎留言探 ...

  9. Leedcode算法专题训练(数组与矩阵)

    1. 把数组中的 0 移到末尾 283. Move Zeroes (Easy) Leetcode / 力扣 class Solution { public void moveZeroes(int[] ...

  10. Linux入门之基本的概念、安装和操作

    目录 Linux基本概念 Linux的安装 虚拟机安装CentOS7 CentOS设置网络 Linux基本操作命令 文件目录操作命令 进程操作命令 文本操作命令 Linux权限操作 用户和组操作命令 ...