返回

剖析JS核心技术,共创基础牢固之路(一)

前端

JS核心技术剖析之旅(一)

一个程序员的自我修养,从夯实基础开始

我是谁?我从哪里来?我要到哪里去?

这些哲学上的终极难题,同样适用于程序员在技术上的自我认知。当我们谈论JS的核心技术时,我们不仅仅是在谈论一个个概念或工具,更是在谈论一种思维方式、一种对世界的认知方式。

函数执行上下文:理解JS程序运行的幕后机制

函数执行上下文(Execution Context,EC),是JS执行代码时所创建的环境。它包含了与函数执行相关的所有信息,包括:

  • 函数的作用域链(Scope Chain)
  • 形参赋值(Formal Parameter Assignment)
  • 变量对象(Variable Object)
  • this指向(this Binding)

在深入理解函数执行上下文之前,我们首先需要了解作用域链(Scope Chain) 。作用域链是一个由函数作用域构成的链条,它决定了变量在函数中可访问的范围。作用域链从当前执行的函数开始,一直向上追溯到全局作用域。

在JS中,变量可以根据其作用域分为:

  • 局部变量(Local Variable):只在函数内部可访问的变量。
  • 全局变量(Global Variable):在整个程序中可访问的变量。

作用域链允许函数访问其外层函数的作用域中的变量。这使得我们可以创建具有私有变量的函数,同时也可以访问其外层函数中的变量。

形参赋值(Formal Parameter Assignment)是指在函数执行时,将实参的值赋给形参。形参是函数定义时声明的参数,实参是函数调用时传递给函数的参数。

变量对象(Variable Object)是函数执行上下文中的一个对象,它包含了函数的作用域中声明的所有变量。

this指向(this Binding)是指在函数执行时,this所指向的对象。this指向通常是指向函数执行时所在的上下文对象,但在某些情况下,this指向可能会发生改变。

闭包:让变量在函数执行后仍然存在

闭包(Closure)是JS中一种非常重要的概念。它指的是函数访问其外层函数的作用域中声明的变量,即使这个外层函数已经执行完毕。

闭包的产生是因为JS的变量作用域规则。在JS中,变量的作用域是由函数决定的。这意味着,在一个函数内部声明的变量,只在这个函数内部可访问。但是,如果一个函数内部的函数访问了这个变量,那么这个变量就会被提升到外层函数的作用域中。

闭包在JS中非常有用。它可以用来创建私有变量,也可以用来模拟块级作用域。

作用域链:理解变量在JS中的作用域

作用域链(Scope Chain)是JS中另一个非常重要的概念。它指的是一个由函数作用域构成的链条,它决定了变量在函数中可访问的范围。作用域链从当前执行的函数开始,一直向上追溯到全局作用域。

在JS中,变量可以根据其作用域分为:

  • 局部变量(Local Variable):只在函数内部可访问的变量。
  • 全局变量(Global Variable):在整个程序中可访问的变量。

作用域链允许函数访问其外层函数的作用域中的变量。这使得我们可以创建具有私有变量的函数,同时也可以访问其外层函数中的变量。