ES6学习函数(四)

这里写目录标题

一、带参数默认值的函数

ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。

js 复制代码
        function log(x,y){
            y=y||'World';//y如果没有值则赋值World
            console.log(x,y);
            
        }
        log('Hello');//hello world

ES6 允许为函数的参数设置默认值,即直接写在参数定义的后面。

js 复制代码
        function log(x,y='World'){
            console.log(x,y);
        }
        log('Hello');//hello world

默认的表达式可以是一个函数

js 复制代码
        function getVal(val){
            return val+5;
        }

        function add2(a,b=getVal(5)){
            return a+b;
        }
        console.log(add2(5));
        //console.log(add2(5,20));

二、rest参数

ES6 引入 rest 参数(形式为...变量名),称为剩余参数或可变参数。它允许函数接收不定数量的参数,这些多余的参数会被收集到一个数组中,使得处理多个参数变得更加简洁和易于维护。‌

js 复制代码
        function add(...values) {
        	let sum = 0;
        	for (var val of values) {
            	sum += val;
        	}
        	return sum;
        }
        console.log(add(1,2,3,4)) // 10

三、箭头函数

一、箭头函数

ES6允许使用箭头=>定义函数

js 复制代码
	let f = x=>x;
	//等同于
	let f = function(x){
	    return x;
	}

	// 有一个参数
	let add = value => value;

	// 有两个参数
	let add = (value,value2) => value + value2;
	
	let add = (value1,value2)=>{
	    
	    return value1 + value2;
	} 
	// 无参数
	let fn = () => "hello world";

	let doThing = () => {
	
	}
	//如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。
	let getId = id => ({id: id,name: 'mjj'}) //注意
	let obj = getId(1);

二、箭头函数的作用

2.1、使表达更加简洁

js 复制代码
	const isEven = n => n % 2 == 0;
	const square = n => n * n;

2.2、简化回调函数

js 复制代码
	// 正常函数写法
	[1,2,3].map(function (x) {
	  return x * x;
	});
	
	// 箭头函数写法
	[1,2,3].map(x => x * x);

三、箭头函数使用注意点

3.1、没有this绑定

js 复制代码
        //点击打印事件
        let PageHandler = {
            id: 123,
            init: function () {
                // 使用bind来改变内部函数this的指向
                document.addEventListener('click', function (event) {
                    this.doSomeThings(event.type);
                }.bind(this), false);
            },
            doSomeThings: function (type) {
                console.log(`事件类型:${type},当前id:${this.id}`);
            }
        }
        PageHandler.init();
        let PageHandler = {
            id: 123,
            init: function () {
                // 箭头函数没有this的指向,箭头函数内部的this值只能通过查找作用域链来确定

                // 如果箭头函数被一个非箭头函数所包括,那么this的值与该函数的所属对象相等,否则 则是全局的window对象
                document.addEventListener('click', (event) => {
                    console.log(this);
                    this.doSomeThings(event.type);
                }, false);
            },
            doSomeThings: function (type) {
                console.log(`事件类型:${type},当前id:${this.id}`);
            }
        }
        PageHandler.init();

3.2、箭头函数中没有arguments对象

js 复制代码
        var getVal = (a, b) => {
            console.log(arguments);
            return a + b;
        }
        console.log(getVal(1, 2)); //arguments is not defined
        //这些写就不存在问题
        function getVal(a,b){
            console.log(arguments);
            return a + b;
        }

arguments 内置对象:在 JavaScript 的 每个函数 的 内部都可以访问 内置的 arguments 对象 ,

3.3、箭头函数不能使用new关键字来实例化对象

js 复制代码
      let Person = ()=>{}
      let p1 = new Person();// Person is not a constructor
相关推荐
snakecy22 分钟前
树莓派学习资料共享
大数据·开发语言·学习·系统架构
我的xiaodoujiao24 分钟前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 24--数据驱动--参数化处理 Excel 文件 1
python·学习·测试工具·pytest
Nebula_g27 分钟前
C语言应用实例:学生管理系统1(指针、结构体综合应用,动态内存分配)
c语言·开发语言·学习·算法·基础
小叮当⇔28 分钟前
“征服式学习”提示词工具箱
学习·算法
Mark_Hide1 小时前
学习笔记7
笔记·学习
许___1 小时前
el-table多选模式下跨分页保留当前页选项
javascript·vue.js
d111111111d1 小时前
STM32外设学习--TIM定时器--编码器接口(程序)
笔记·stm32·嵌入式硬件·学习
Anesthesia丶1 小时前
UV工具学习笔记
笔记·学习·uv
我的golang之路果然有问题1 小时前
mac M系列芯片 unity 安装会遇到的错误以及解决
经验分享·学习·macos·unity·游戏引擎
梦想平凡1 小时前
情怀源代码工程实践(加长版 1/3):确定性内核、事件回放与最小可运行骨架
开发语言·javascript·ecmascript