一、函数返回多个值
- 函数返回多个值的时候,可以返回一个数组,然后数组的解构,将两个值分别取出来
function fn() {
const a = 1;
const b = 2;
return [a, b]
}
const [a, b] = fn();
console.log(a, b);
二、闭包
- 闭包的本质就是在一个函数内部创建另一个函数。一个函数可以访问另一个函数的变量
- 闭包原理:上级作用域无法直接访问下级作用域中的变量,但下级作用域可以访问上机作用域中的变量。
- 缺点:内存泄漏导致变量无法被释放
闭包的三个特性: ①函数嵌套函数 ②函数内部可以引用函数外部的参数和变量 ③参数和变量不会被垃圾回收机制回收
在下面这段代码中,一般情况下,函数fn2执行完后,就应该联通它里面的变量一同被销毁。但是在这个例子中,匿名函数作为fn的返回值被赋予给了res,这个时候相当于res=function(){console.log?},并且匿名函数内部引用着fn2里的变量c,所以变量c无法被销毁。
function fn1(){
var n = 10;
function fn2(){
console.log(n);
}
}
function fn1(){
function fn2(){
var n = 10;
}
console.log(n);
}
闭包中的this指向: 因为闭包并不属于这个对象的属性或方法。所以在闭包中的this是指向window的
const obj = {
name: 'xx',
say: function() {
console.log(this);
return function() {
console.log(this);
}
setTimeout(() => {
console.log(this);
}, 1000)
return (n) => {
console.log(this);
console.log(n);
}
}
}
obj.say()(8)
三、参数默认值
1.短路赋值
function fn(a, b) {
a = a || 0;
b = b || 0;
return a + b
}
console.log(fn(2, 4));
2.给参数设置默认值
function fn(a = 0 , b = 0) {
return a + b
}
console.log(2,3);
|