JS作用域与作用域链

2023-05-30 10:15:57 浏览数 (1)

一、作用域

分为块级作用域、全局作用域、函数作用域

作用域就是一个独立的地盘,让变量不会外泄、暴露出去。也就是说作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。

二、作用域链

当前作用域没有定义的变量,这成为自由变量 。需要向父级作用域寻找(注意:这种说法并不严谨,作用域中取值,这里强调的是“创建”,而不是“调用”,切记切记,其实这就是所谓的"静态作用域"。)。

三、面试真题:

代码语言: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)

0 人点赞