作用域
定义:所有变量(包括基本类型和引用类型)都存在于一个执行环境中(也称为作用域)当中,这个执行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量。
1 | function a() { |
立即执行函数
立即执行函数,执行完后立即销毁(释放)即针对初始化功能的函数。
对于函数,只有表达式才能被执行,外面有一层括号使之成为表达式。
1 | let num = (function (a, b, c) { |
考查知识点1
2
3
4
5
6
7let x = 1;
if (function f() {}) {
x += typeof f;
}
console.log(x); // 1undefined
// f函数外加括号, 已经变成函数表达式,
// 不再是函数声明, f已经成为undefined;
compare
1 | // 报错语法错误,只有函数表达式才可以被执行 |
注意理解1
2
3
4let test = function () {
console.log('a');
}();
// 在控制台访问test 输出 undefined,执行完后立即销毁
闭包
函数累加器(可以不依赖于全局变量)
1 | function add() { |
可以做缓存(存储结构)
1 | // 1. 用对象返回两个函数 |
可以实现封装,属性私有化
1 | function Deng(name, wife) { |
模块化开发,防止污染全局变量
1 | let name = "xyz"; |
闭包的问题
实例一
下面这段代码会打印出十个10
1 | function test() { |
解决方法(将 var
改成 let
或者改成下面这段代码),会打印出 0 - 9
1 | function test() { |
实例二
1 |
|
this的经典题目
代码第一行 var
改成 let
,运行情况不同……
1 | var name = 222; |
1 | let foo = 123; |