复习函数知识点
声明函数
- 一次声明,多次使用的语句块。
- 参数:形参、实参。
- 返回值:函数运行的结果。
函数声明提升
1
2
3
4
5
6
7
8
9
10
11function fun(n, m) {
return n + m;
}
let result1 = fun(10, 20);
let result2 = fun(100, 200);
console.log(result1);
console.log(result2);
// 函数声明提升
function fun(n, m) {
return n + m;
}匿名函数
一个函数如果不需要多次调用那么可以写成匿名函数。
例如setInterval
的匿名函数。setInterval
这种函数又叫回调函数,将匿名函数作为参数传递给另外一个函数或方法。1
2
3
4
5
6
7
8setInterval(function () {
console.log("hello");
}, 1000);
//相当于
function fun() {
console.log("hello");
}
setInterval(fun, 1000);函数表达式
函数表达式没有函数声明提升的特性。
1
2
3
4
5const fun = function (n, m) {
return n + m;
};
let result = fun(10, 20);
console.log(result); // 30方法:属于某一对象的函数。
1
2
3
4
5
6
7
8
9
10
11const cat = {
name: "miaomiao",
// sayName: function(){
// console.log(this.name);
// }
// 简写
sayName() {
console.log(this.name);
},
};
cat.sayName();
以上内容编写于 2021 年 8 月 20 日 02 点 04 分。
函数进阶
- 设置默认参数值
- 立即执行函数
- 闭包
- 箭头函数
设置默认参数值
ES2015 的语法可以为函数的参数设置默认值。
1 | function fun(x = 10, y = 20) { |
例如
未传递参数和未设置默认参数值时
1
2
3
4
5
6
7
8function fun(n, m) {
console.log(n); // undefind
console.log(m); // undefind
return n + m;
}
let result = fun();
// NaN: not a Number
console.log(result); // NaN未传递参数但设置默认参数值时
1
2
3
4
5
6
7function fun(n = 100, m = 200) {
console.log(n); // 100
console.log(m); // 200
return n + m;
}
let result = fun();
console.log(result); // 300传递参数也设置默认参数值时
1
2
3
4
5
6
7function fun(n = 100, m = 200) {
console.log(n); // 10
console.log(m); // 200
return n + m;
}
let result1 = fun(10);
console.log(result1); // 210
立即执行函数
功能:封装代码。
- 声明之后可以直接调用;
- 不可以多次调用;
- 某些第三方库实现封装。
1 | (function () { |
ES2015 有模块化的语法,所以立即执行函数现在也不常用了。
作用域链
- 每一个函数都会创建一个新的作用域。
- 函数外部无法访问函数内部的值。
- 函数内部的值可以访问函数外部的值。
如果内部找不到值就去外部找。
例 1
1 | let str = "hello"; |
例 2
1 | let str = "hello"; |
例 2 的树状图
1 | |-window |
以上内容编写于 2021 年 8 月 24 日 01 点 11 分。
闭包
闭包函数:声明在一个函数中的函数,叫做闭包函数。
闭包:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回之后。
闭包的特性: 内部函数未执行完,外部函数即使执行完成,外部函数中的变量也不会被销毁。
1 | function fun1() { |
利用闭包实现了代码的封装。
1 | function fun1() { |
代码封装
ES5 的一个模块化的语法。
1 | const module = (function () { |
箭头函数
作用: 简化写法。
1 | const add = (x) => { |
1 | const fun = function (x) { |
例子 - 每秒输出一次名字
1 | const cat = { |
使用 function
定义的函数, this
取决于调用的函数。
使用箭头函数, this
取决于函数定义的位置。
箭头函数和普通函数的this
指向不同。
普通函数指向的是调用该函数的对象。
箭头函数:在哪里定义,this
就指向谁。
课后练习
使用箭头函数延迟调用
cat.sayName
, 输出 cat 对象的name
属性。1
2
3
4
5
6
7
8
9const cat = {
name: "miaomiao",
sayName() {
setInterval(() => {
console.log(this.name);
}, 1000);
},
};
cat.sayName();
以上内容编写于 2021 年 8 月 25 日 02 点 31 分。