JavaScript函数扩展与箭头函数超详细讲解
作者:亦世凡华、 发布时间:2024-10-31 17:34:09
函数参数扩展
ES6 允许给函数参数赋初始值:
形参初始值 具有默认值的参数,一般位置要靠后(潜规则);使用参数默认值时,函数不能有同名参数;参数默认值不是传值的,而是每次都重新计算默认值表达式的值。
function add(a,b,c=10){
return a + b + c;
}
let result = add(1,2);
console.log(result); // 13
与解构赋值结合,如果传递数值了就用传递的数值,否则就用默认值
function connect({host="127.0.0.1",username,password,port}){
console.log(host);
console.log(username);
console.log(password);
console.log(port);
}
connect({
// host:'localhost', //传了值就用这个,如果没有传就用默认值
username:'root',
password:'root',
port:80
})
当函数传参给予了默认值,length属性将忽略传递默认值的长度。
<script>
function fun(a,b,c){
console.log(fun.length);
}
fun()//3
function fun(a,b,c=1){
console.log(fun.length);
}
fun()//2
</script>
当我们给参数设置默认值时,会自动形成作用域,仅限函数内部的数据传值,如果函数形参没有传递数值,就会找函数之外的数,以下面例子为例:
<script>
var x = 1;
// 函数形参定义了x的值,就不需要去外面再找x值
function f(x, y = x) {
console.log(y);
}
f(2) // 2
var a = 1;
// 函数形参没有定义a的值,所以需要去外面找a的值,所以打印为1
function g(b = a){
let a = 2;
console.log(b);
}
g()//1
</script>
rest参数
ES6引入rest参数(其形式为:...变量名),用于获取函数的多余参数,这样就不需要使用arguments对象,rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
<script>
// ES5 获取实参的方式
function date(){
console.log(arguments);
}
date(1,2,3,4,5)
console.log('--------------');
// rest参数
function date1(...args){
console.log(args);
}
date1(1,2,3,4,5)
</script>
箭头函数
在ES6中规定允许使用箭头 ( => ) 定义函数。
//正常写法
let fn = function(){
}
//箭头函数
let fn1 = (a,b) =>{
return a + b;
}
console.log(fn1(1,2)); //3
箭头函数的使用规范
箭头函数中:this 是静态的,this始终指向函数声明时所在作用域下的 this 的值。
function getName(){
console.log(this.name);
}
let getName2 = () =>{
console.log(this.name);
}
// 设置 window 对象的 name 属性
window.name = '张三'
const person = {
name:'小张'
}
// 直接调用
getName() //张三
getName2() //张三
//call 方法调用
getName.call(person) //小张
getName2.call(person) //张三 箭头函数是静态的,始终指向开始时的第一个值
箭头函数中: 不能构造实例化对象,否则会报错。
let Person = (name,age) =>{
this.name = name;
this.age = age;
}
let p = new Person('张三',18)
console.log(p);
箭头函数中:不能使用 arguments 变量。
let fun = () => {
console.log(agruments);
}
fun(1,2,3)
箭头函数中:箭头函数的简写方式。
1、省略小括号,当形参有且只有一个的时候。
let add = n => {
return n*n;
}
console.log(add(8));//64
2、 省略花括号,当代码体只有一条语句时,此时 return 必须省略,而且语句的执行结果就是函数的返回值。
let pow = (n) => n+n;
console.log(pow(2)); //4
箭头函数的嵌套
箭头函数内部,还可以使用箭头函数:
<script>
// ES5 语法的多重嵌套
function insert(value) {
return {into: function (array) {
return {after: function (afterValue) {
array.splice(array.indexOf(afterValue) + 1, 0, value);
return array;
}};
}};
}
console.log(insert(2).into([1, 3]).after(1)); //[1, 2, 3]
// ES6 箭头函数嵌套
let insert = (value) => ({into: (array) => ({after: (afterValue) => {
array.splice(array.indexOf(afterValue) + 1, 0, value);
return array;
}})});
console.log(insert(2).into([1, 3]).after(1)); //[1, 2, 3]
</script>
箭头函数案例
点击 div 2s 之后颜色变成 pink :
<head>
<title>Document</title>
<style>
div {
width: 200px;
height: 200px;
background: #58a;
}
</style>
</head>
<body>
<div id="id"></div>
<script>
// 获取元素
let div = document.querySelector('#id')
// 绑定事件
div.addEventListener("click",function(){
// 如果想用 this 调用,先在外部保存this,否则this会指向window对象
let _this = this;
// 点击 2s 之后让盒子颜色改变
setTimeout(()=>{
// div.style.background = 'pink'
_this.style.background = 'pink'
},2000)
})
</script>
</body>
从数组中返回偶数的元素:
<script>
const arr = [1,6,9,10,100,25];
/* filter() 方法创建一个新的数组,函数中有return返回值。
* 若返回值为true,这个元素保存到新数组中;
* 若返回值为false,则该元素不保存到新数组中;原数组不发生改变。
*/
const result = arr.filter(function(item){
if(item%2===0){
return true;
}else{
return false
}
})
console.log(result);
console.log('-------------------');
const result1 = arr.filter(item => item % 2 ===0 )
console.log(result1);
// 箭头函数适合与 this 无关的回调:定时器。数组方法的回调
// 箭头函数不适合与 this 有关的回调:事件回调、对象的方法
</script>
使用总结:
箭头函数没有自己的this对象
不可以当做构造函数,即不能对箭头函数使用new命令,否则报错
不可以使用arguments对象,该对象在函数体内不存在,如需使用用rest函数代替
不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
来源:https://z5qyj5pyi.blog.csdn.net/article/details/126804778


猜你喜欢
- OpenCV简介OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Ma
- 数组转换成切片a := [10]int{}fmt.Println(a) s1 := a[:10] //取前10个元素
- 例如:文本abcaBcabCaBCabcaBCa,关键字bc,在不区分大小写的情况,一共有6个匹配项。 则在网页中显示的是abcaBcabC
- python 版本 3.x首先安装 PIL由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版
- 没什么实际用途,纯属消遣Quick Click<html><head><title>Quick_Clic
- 学习python编程,首先要配置好环境变量。本文主要讲解python的环境变量配置,在不同版本下如何安装Windows打开Python官方下
- 一定要注重代码规范,按照平时的代码管理,可以将Python代码规范检测分为两种:静态本地检测:可以借助静态检查工具,比如:Flake8,Py
- 看下面的例子, var btn = document.getElementById('mybtn'); btn.onclic
- 系统模块import os系统模块用于对系统进行操作。常用方法os模块的常用方法有数十种之多,本文中只选出最常用的几种,其余的还有权限操作、
- PHP echo() 函数实例输出一些文本:<?php echo "Hello world!"; ?>定义和
- 最近要对一系列数据做同比比较,需要用到numpy和pandas来计算,不过使用python安装numpy和pandas因为linux环境没有
- python的三种输出格式环境:pycharm + python3.81. % (不推荐使用)格式: 格式字符串% (输出项1,输出项2,&
- ./runInstaller 启动图形化报错 PRVF-0002 : Could not retrieve local nodename.
- import socketimport Queueimport threadingdef worker(): &nbs
- 在python中,通过导入random库,就能使用randint 和 randrange这两个方法来产生随机整数。那这两个方法的区别在于什么
- 本文实例讲述了PHP实现执行外部程序的方法。分享给大家供大家参考,具体如下:在一些特殊情况下,会使用PHP调用外部程序执行,比如:调用she
- 初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关键字,然而,带有 yield 的函数执行流程却和普通函
- 不知道大家在面试或者工作过程中有没有被 mouseover 和 mouseenter (对应的是 mouseout 和 mouseleave
- 安装laravel框架命令行cd进入指定目录下,执行composer create-project --prefer-dist larave
- 首先你得引入bootstrap与jquery推荐一个CDN:http://cdn.gbtags.com/index.html然后就是开始编写