带参数的默认值函数
<script type="text/javascript">
function add(a = 10,b = 20){
return a + b;
}
console.log(add());
</script>
默认的表达式作为函数(函数里面套函数或表达式)
<script type="text/javascript">
function add(a = 10,b = getVal(5)){
return a+b;
}
function getVal(val){
return val + 5;
}
console.log(add(10));
</script>
含对象(类似结构体)的函数
function pick(obj){
let result = Object.create(null);
for(let i = 1;i < arguments.length;i++){
result[arguments[i]] = obj[arguments[i]]
}
return result;
}
let student = {
name:'hy',
num:'123',
sex:'male'
}
let stu = pick(student,'name','num','sex');
console.log(stu);
含剩余参数的函数
剩余参数:由三个…和一个紧挨着的具名参数指定 (...keys)
完美取代了上面对arguments的使用
function pick(obj,...keys){
let result = Object.create(null);
for(let i = 1;i < keys.length;i++){
result[keys[i]] = obj[keys[i]];
}
return result;
}
let student = {
name:'hy',
num:'123',
sex:'male'
}
let stu = pick(student,'name','num','sex');
console.log(stu);
扩展运算
扩展运算也是由…构成,与剩余运算符联系紧密,但与之不同的是:
剩余运算符:把多个独立的参数合并到一个数组里面
扩展运算符:将一个数组分割,并将各个项作为分离的参数返回给函数
const arr = [10,20,30,40,50,100,20];
console.log(Math.max(...arr));
闭包函数
function createCounter() {
let count = 0;
return function() {
count += 1;
return count;
};
}
let counter = createCounter();
console.log(counter()); // 输出 1
console.log(counter()); // 输出 2
console.log(counter()); // 输出 3
在这个例子中,createCounter 函数返回一个匿名函数,这个匿名函数能够访问其外部函数的作用域,因此可以访问并修改 count 变量。每次调用 counter 函数时,都会增加 count 的值,并返回新的值。这就是闭包的基本概念。
箭头函数
使用=>来定义,取代了function( ){ }
一. 使用function:
let add = function(a,b){
return a + b;
console.log(add(10,20));
}
二. 使用=>
1.
let add =(a,b)=>{
return a + b;
}
console.log(add(10,20));
2.
let add =(a,b)=>a+b;
console.log(add(10,20));
3.含对象的时候(注意{}不要省略)
let getObj = id => ({ id: id, name: 'awagn' });
console.log(getObj);
箭头函数使用时的注意事项
- 函数内部没有arguments
- 函数内不能使用new函数来实例化对象
- 箭头函数只能用于简化函数表达式
- 箭头函数不能用于函数声明,构造函数,原型