javascript箭头函数和this的指向问题
箭头函数
下面两代码等价:
const fun1 = function(x){return x*x;}const fun = x => x*x;
function换成=>,放在参数和函数体中间
注意:如果没有参数,或有多个参数,需要使用()来定义参数列表
如果有一个参数,可以不()
如果函数体中只有一条语句,可以不用{}
排序:
let arr = [1,5,2,34,22];
let narr = arr.sort(function(a,b){ return a-b;});
console.log(narr);
也可以换成:
let narr = arr.sort((a,b)=>a - b);
//省略了{}
运行:
1.如果箭头函数返回对象时,一定要在对象外边加上小括号
<script>const fun = id =>({id:id,namee:'Hang三'});console.log(fun(10))</script>
运行结果:
this的指向
- 普通函数的this:指向它的调用者,如果没有调用者则默认指向window.
- 箭头函数的this:指向箭头函数定义时所处的对象,而不是箭头函数使用时所在的对象,默认使用父级的this
- 综上,箭头函数没有自己的this,它的this是继承而来,默认指向在定义它时所处的对象
- 代码块多于一条语句,就用大括号括起来,并且用return返回
- 箭头函数能够简化回调函数
点击块的背景颜色后变色,用普通函数实现:
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title></title><style>#box{width: 100px;height: 50px;background: red;}#box.bgcolor{background:teal;}</style>
</head>
<body>
<div id = "box"></div>
</body>
<script>const box = document.getElementById('box');box.onclick = function(){this.className = 'bgcolor';}
</script></html>
效果:
点击红色的之后:
用箭头函数:(加延迟函数setTimeOut)
const box = document.getElementById('box');
box.onclick = function () {setTimeout(() => {console.log(this);this.className = 'bgcolor';}, 3000);
}
由这个箭头函数的this的用法也可以知道箭头函数中的this并不是谁调用这个方法就代表哪个对象,而是在它所声明的位置的父级对象
goods = [11,2,43,21,4];
let good1 = good.filter(function(n) {return n >=10 ;})
let good2 = good1.map(function(n) {return n*0.5;})
let sum = good2.reduce(function(s,n){return s+n;},0);
上面的函数转化成钩子函数写可以简化为:
goods = [11,2,43,21,4];
let sum = goods.filter(n =>n >= 10).map(n => n*0.5).reduce((s,n)=>s+n);
map filter reduce方法
其中:
map()方法定义在JavaScript的Array中,它返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。
1.map方法
注意:
map()不会对空数组进行检测
map()不会改变原始数组
语法:
array.map(function(currentValue, index, arr), thisIndex)
参数说明:
function(currentValue, index, arr):必须。为一个函数,数组中的每个元素都会执行这个函数。其中函数参数:
currentValue:必须。当前元素的的值。
index:可选。当前元素的索引。
arr:可选。当前元素属于的数组对象。
thisValue:可选。对象作为该执行回调时使用,传递给函数,用作"this"的值。
2.reduce方法:
reduce() 方法
实例
计算数组元素相加后的总和:
var numbers = [65, 44, 12, 4];function getSum(total, num) {return total + num;
}
function myFunction(item) {document.getElementById("demo").innerHTML = numbers.reduce(getSum);
}
输出结果:
125
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
语法:
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
function(total,currentValue, index,arr) 必需。用于执行每个数组元素的函数。
initialValue 可选。传递给函数的初始值
3.JavaScript Array filter() 方法
返回数组 ages 中所有元素都大于 18 的元素:
var ages = [32, 33, 16, 40];function checkAdult(age) {return age >= 18;
}function myFunction() {document.getElementById("demo").innerHTML = ages.filter(checkAdult);
}
输出结果为:
32,33,40
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测。
注意: filter() 不会改变原始数组。
语法
array.filter(function(currentValue,index,arr), thisValue)
function(currentValue, index,arr) 必须。函数,数组中的每个元素都会执行这个函数
thisValue 可选。对象作为该执行回调时使用,传递给函数,用作 “this” 的值。
如果省略了 thisValue ,“this” 的值为 “undefined”
javascript箭头函数和this的指向问题相关推荐
- JavaScript箭头函数的使用和this指向
01-箭头函数的基本使用 普通定义函数的方式:function const aaa = function() {} // es6箭头函数 const aaa = () => {} 对象字面量定义 ...
- JavaScript箭头函数
JavaScript箭头函数 箭头函数(arrow functions),是一个来自ECMAScript 2015(又称ES6)的全新特性.箭头函数有时候也叫"lambda表达式" ...
- ES6箭头函数中的this指向
1箭头函数中的this (1)箭头函数中没有this : 这意味着 call() apply() bind() 无法修改箭头函数中的this (2)箭头函数中的this指向 :访问上一个作用域的thi ...
- 箭头函数及其this的指向
目录 一.箭头函数 1. 基础语法 2.箭头函数简写 二.箭头函数的 this 1.全局函数下的 this 2.对象方法里面的 this 3.构造函数的this 4. call().apply(). ...
- JavaScript 箭头函数
文章目录 箭头函数语法 示例 1:无参数的箭头函数 示例 2:带一个参数的箭头函数 示例 3:作为表达式的箭头函数 示例 4:多行箭头函数 this 与箭头函数 在常规函数中 在箭头函数中 参数绑定 ...
- JavaScript箭头函数中的this
JavaScript箭头函数中的this详解 箭头函数极大地简化了this的取值规则. 普通函数与箭头函数 普通函数指的是用function定义的函数: var hello = function () ...
- JavaScript箭头函数返回箭头函数
以下代码中,执行后输出什么结果呢? <html> <body> </body> <script>var a = 123const foo = () =& ...
- JavaScript箭头函数(Arrow Function)
2019独角兽企业重金招聘Python工程师标准>>> ES6标准新增了一种新的函数:Arrow Function(箭头函数). 更简洁的语法 我们先来按常规语法定义函数: func ...
- 箭头函数:this的指向问题
关于typescript中函数的定义,有提到过它的定义方式(详见:函数的定义及特性),当时提到typescript中的'=>'不是ES6中的箭头函数的意思.什么是ES6的箭头函数?代码如下: v ...
最新文章
- PAT(甲级)2018年冬季考试 7-4 Heap Paths(非递归与递归解法)
- 关键短语抽取及使用BERT-CRF的技术实践
- Coursera课程Python for everyone:Quiz: Networks and Sockets
- Java-String的常用方法总结!
- 牛客18985 数字权重 (数学,快速幂)
- Eclispe创建jsp文件,提示错误:“The import Xxx cannot be resolved“的解决方案
- 需求评审会议上,被逼疯的程序员
- 硬盘使用GPT方式安装windows 10方法
- 反射——类(Class)
- Tomcat服务器搭建及测试教程(1),腾讯技术官发布的“神仙文档”火爆网络
- 关于WEB标准的理解
- es6 语法 (类与对象)
- 全卷积网络 FCN 详解(很好,详看)
- paip.cpu占用高解决方案---ThreadMast 跟Process Lasso的使用
- linux基础篇(centeros)
- 马哥 python培训
- 烽火HG680-KB及其他5款Hi3798MV310芯片盒子刷机固件及教程(当贝桌面)
- 设计模式篇(六)——观察者模式
- 区块链开发之智能合约设计模式
- USB PD快速充电通信原理
热门文章
- combus通讯_Vue兄弟组件通信Bus传值--小案例
- 计算机组成原理 第四版 总线的主模块 总线的从模块,唐朔飞计算机组成原理课件3.ppt...
- html5二次元插件,送你PS一键制作动漫二次元插件,80套背景+50种效果+20款中英字体...
- Linux中把文件夹打成war包,SpringBoot中maven项目打成war包部署在liunx服务器上的方法...
- java jdk 检测安装_JDK如何安装和配置环境变量以及检验是否成功安装JDK的方法
- nearbyserversocket驱动_关于Socket和ServerSocket类详解
- java redirect 跨域_碰到了跨域问题, Redirect is not allowed for a preflight request
- DataFountain训练赛 | 用户逾期行为预测
- 打包指令_DD19A电动热熔打包机,更换易损件方法
- 非凸函数上,随机梯度下降能否收敛?能,但有条件,且比凸函数收敛更难