返回

认识作用域、作用域链、闭包、立即执行函数和匿名函数

前端

认识作用域

作用域是指变量和函数的访问区域,分为全局作用域和函数作用域。在 ES6 中,添加了 let 后,有了块级作用域的概念。

全局作用域

全局作用域是指在任何地方都可以访问的变量和函数,通常在脚本文件的顶部定义。

函数作用域

函数作用域是指在函数内部可以访问的变量和函数。

块级作用域

块级作用域是指在 {} 块中定义的变量和函数,只能在该块内访问。

认识作用域链

作用域链是指一个变量或函数在当前作用域中找不到时,会沿着作用域链向上查找,直到找到该变量或函数为止。

认识闭包

闭包是指可以访问其他函数作用域中变量的函数。

认识立即执行函数

立即执行函数是指在函数定义后立即调用的函数,通常用 ()() => {} 的形式表示。

认识匿名函数

匿名函数是指没有名字的函数,通常用 function () {}() => {} 的形式表示。

总结

作用域、作用域链、闭包、立即执行函数和匿名函数都是 JavaScript 中非常重要的概念,理解这些概念对于编写高质量的 JavaScript 代码非常有帮助。

实例

// 全局变量
var globalVariable = "I am a global variable";

// 函数作用域变量
function myFunction() {
  var localVariable = "I am a local variable";
  console.log(globalVariable); // "I am a global variable"
  console.log(localVariable); // "I am a local variable"
}

// 块级作用域变量
if (true) {
  let blockVariable = "I am a block variable";
  console.log(blockVariable); // "I am a block variable"
}

// 闭包
function outerFunction() {
  var outerVariable = "I am an outer variable";

  function innerFunction() {
    console.log(outerVariable); // "I am an outer variable"
  }

  return innerFunction;
}

var innerFunction = outerFunction();
innerFunction(); // "I am an outer variable"

// 立即执行函数
(function () {
  console.log("I am an immediately executed function");
})(); // "I am an immediately executed function"

// 匿名函数
var anonymousFunction = function () {
  console.log("I am an anonymous function");
};

anonymousFunction(); // "I am an anonymous function"