返回

深奥的《JavaScript(上)》—— 无痛入门作用域与闭包知识,兼谈变量提升

前端

看完《你不知道的 JavaScript(上)》再谈作用域和闭包,配有代码,一文搞懂!

各位铁汁,大家好!我是云牧。在文章开始之前,我想先问大家一个问题:如果要你用一句话概括JavaScript的作用域和闭包,你会怎么说?别着急,我们先来一起回顾下作用域和闭包的基础知识。

作用域

作用域,从字面上理解,就是JavaScript中变量和函数可以被访问的范围。在JavaScript中有两种作用域:全局作用域和局部作用域。

  • 全局作用域: 顾名思义,全局作用域就是指在JavaScript程序中任何地方都可以访问的变量和函数。
  • 局部作用域: 局部作用域是指只在函数内部可以访问的变量和函数。

作用域在JavaScript中非常重要,因为它们决定了变量和函数的可见性和访问权限。如果一个变量或函数在一个作用域中声明,那么它只能在这个作用域内被访问。

闭包

闭包是指可以访问其他函数作用域中变量的函数。闭包在JavaScript中非常有用,它可以帮助我们创建更灵活和强大的代码。

闭包的原理并不复杂,它利用了JavaScript的作用域机制。当一个函数被调用时,它的作用域会被创建,并且这个作用域中的所有变量和函数都可以在这个函数内部被访问。当这个函数执行完毕后,它的作用域会被销毁,但是如果在这个函数内部又嵌套了另一个函数,那么这个嵌套函数就可以访问外部函数的作用域,这就是闭包的原理。

变量提升

变量提升是一个非常重要的JavaScript概念,它指在JavaScript中,变量和函数的声明会被自动提升到当前作用域的顶部。变量提升在JavaScript中非常有用,它可以帮助我们避免一些常见的错误。

举个例子,假设我们有一个函数,在这个函数中我们声明了一个变量x,并给它赋值为1。但是,在这个函数执行之前,我们又在函数外声明了一个变量x,并给它赋值为2。如果我们不了解变量提升,那么我们可能会以为函数中的x的值为1,但实际上,函数中的x的值为2,因为变量提升将函数中的x提升到了函数的顶部,覆盖了函数外的x。

了解了变量提升,我们就可以避免一些常见的错误,并编写出更加健壮的代码。

最后

希望通过这篇文章,大家能够对JavaScript中的作用域和闭包有一个更深入的了解。JavaScript是一门非常强大的语言,作用域和闭包是JavaScript中的重要概念,掌握它们可以帮助我们编写出更加灵活和强大的代码。

附录:代码示例

// 全局变量
var x = 1;

// 函数
function foo() {
  // 局部变量
  var y = 2;

  // 闭包
  function bar() {
    // 可以访问外部函数的局部变量
    console.log(y); // 输出:2
  }

  // 返回闭包
  return bar;
}

// 调用函数并执行闭包
var baz = foo();
baz();

参考文章: