剖析JS核心技术,共创基础牢固之路(一)
2024-02-05 17:00:18
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):在整个程序中可访问的变量。
作用域链允许函数访问其外层函数的作用域中的变量。这使得我们可以创建具有私有变量的函数,同时也可以访问其外层函数中的变量。