一、作用域
分为块级作用域、全局作用域、函数作用域
作用域就是一个独立的地盘,让变量不会外泄、暴露出去。也就是说作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。
二、作用域链
当前作用域没有定义的变量,这成为自由变量 。需要向父级作用域寻找(注意:这种说法并不严谨,作用域中取值,这里强调的是“创建”,而不是“调用”,切记切记,其实这就是所谓的"静态作用域"。)。
三、面试真题:
代码语言:javascript复制const food = "rice";
const eat = function () {
console.log(`eat ${food}`);
};
(function () {
const food = "noodle";
eat(); // eat rice
})();
代码语言:javascript复制var food = "rice";
const eat = function () {
console.log(`eat ${food}`);
};
(function () {
food = "noodle";
eat(); // eat rice
})();
console.log(`eat ${food}`); // eat noodle
代码语言:javascript复制var x = 10
function fn() {
console.log(x)
}
function show(f) {
var x = 20;
(function () {
f() // 10,而不是 20
})()
}
show(fn)