es6之前函数是不能参数设置默认值的
参数1是必须传递 其余参数有默认值,可传递
函数参数的返回值,也可以是另外一个函数的返回值;
例
function fn(r,p){
return 3.14;
}
function fn(r, p = pi()){//pi()返回值交给p
console.log(r*r*p);
}
fn(10);
只想传递第二往后的参数,参数一保持默认值,可以用undefined占位;
例
function fn(name='Mr.lee',age){
console.log(name);//null 空都不行只能undefined
console.log(age);
}
fn(undefined,100);
支持参数二使用参数一的值作为默认值,不支持参数一使用参数二的值作为默认值
例
function fn(x,y=x) {
console.log(y);
}
fn(5);
函数的参数可以有不定参数...other
es6提供了一个name属性用于获取函数名有四种;
第一种:
function fn(){}
第二种:
let fn=function(){}
第三种:
let obj={fn3:function(){},}
第四种
console.log(new Function().name);第四种匿名函数anonymon
箭头函数
es6新增一个使用=>箭头符号定义函数的语法特性
let fn=name=>name;
//let fn=(function(name)箭头前面的name){(return name;箭头后面的name也就是参数的返回值)};
console.log(fn('Mr.lee'));
如果函数体需要更复杂的操作,可以用将箭头符号右边使用传统的函数体
let fn=(x,y)=>{
return x+y;
}
console.log(fn(10,20));
箭头函数可以传递俩个或以上的参数,运算后返回
let fn=(x,y)=>x+y;
//比之简便let fn=(function(x,y)=(x,y)){((return x+y;)=(x+y))}
console.log(fn(10,20));
如果定义的函数,并不需要传递参数,可以用()方式直接返回;
let fn=()=>'Mr.lee';
console.log(fn());
如果箭头符号右边是对象则需要用()包含着;
let fn=name=>({name:name,age:100});
console.log(fn('Mr.lee').name);
es6支持箭头符号左边是对象作为参数,右边是对象的属性运算
let fn=({name,age})=>name+','+age;
console.log(fn({name:'Mr.lee',age:100}));
自我执行函数,也可以使用箭头符号
((name)=>{
console.log(name);
})('Mr.lee');
this
es6之前this的指向是个头疼的问题
例
let obj={
name:'Mr.lrr',
age:100,
fn:function(){
// let that=this;
// setTimeout(function(){
// console.log(that.name+','+that.age);
// },500)
setTimeout(()=>{
console.log(this);
console.log(this.name+','+this.age)
箭头函数
},500)
}
};
abj.fn();
2.上面的例子比较典型,this 全局指向window,在某个对象内部指向当前对象;
3.当obj对象下包含了类似setTimeout函数内部,这时this指向就出现问题了;
4. web环境下,它指向了window,而node环境下它指向setTimeout:
5.所以,我们通俗的做法,就是将this在setTimeout外部进行赋值保存;
6.箭头函数的出现,彻底解决了this在内部指向的问题,直接指向我们所需要;
7.因为,箭头函数中的this是最外层定义的函数绑定,不受内部影响;
箭头支持一些内置函数的使用
例
let arr =[3,1,2].sort(function(a,b){
return b-a;
})
let arr =[3,1,2].sort((a,b)=>a-b);
console.log(arr);
箭头函数不支持arguments绑定,请直接使用...other模式(rest运算符)
例
// 不确定参数时使用...
let fn=(...other)=>{
return other[0]+other[1]
}
console.log(fn(10,20));
箭头函数和普通函数一样,都可以被typeof和instanceof
console.log(typeof fn);//得到的function
console.log(fn instanceof Function);//得到true 是函数
尾调用
1.什么是尾调用呢?在一个函数的最后可执行的一步调用了其它函数
//递归函数
'use strict';//严格模式:有些不规范的在非严格模式下不会报错,严格模式下会报错
function fn(x){
if(x<=1){
return 1;
}
return fn(x-1);
}
fn(10);
2.那?什么又是尾调用优化?为何要优化?因为:每次尾调用都会创建栈帧;
3.如果尾调次数过多,而内存中的调用栈越来越大,可能就会出现程序问题;
4.尤其是在递归函数的问题上,尾调用优化适合在这种场景中使用;
5.首先要说明,尾调用优化必须是在ES6的严格模式下,'use strict ';
5.首先要说明,尾调用优化必须是在ES6的严格模式下,'use strict ';
6.严格模式,可以设置为全局作用域,也可以在函数体内有效;
7.严格模式对变量、对象和函数做了一些代码规范等等,具体规范可以搜索;8.而对于尾调用,必须严格按照三个规则,才能执行严格模式下的优化,如下:
(1).尾调用必须return返回:
/ go(×);错误
(2).尾调用return返回不得含其它操作l / return go(x) + 1;错误
7.严格模式对变量、对象和函数做了一些代码规范等等,具体规范可以搜索;8.而对于尾调用,必须严格按照三个规则,才能执行严格模式下的优化,如下:
(1).尾调用必须return返回:
/ go(×);错误
(2).尾调用return返回不得含其它操作l / return go(x) + 1;错误
(3).尾调用return返回的不是函数,而是函数赋值的变量,不在尾部;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix