一、执行上下文
JavaScript 执行上下文是指 JavaScript 引擎在执行代码时的环境。它包含了代码所需的所有信息,包括变量对象、作用域链、this 对象等。
JavaScript 引擎在执行代码时会创建一个执行上下文栈,用于维护当前执行上下文。每当执行一个函数时,JavaScript 引擎会创建一个新的执行上下文并将其压入栈顶。当函数执行完成后,JavaScript 引擎会弹出栈顶的执行上下文。
二、作用域
作用域是指 JavaScript 中变量和函数的可访问范围。JavaScript 中有全局作用域和局部作用域。
1、全局作用域
全局作用域中的变量和函数在整个程序中都可以访问。
JavaScript 中的变量查找遵循作用域链的原则,即先在当前作用域中查找变量,如果没有找到,则在父作用域中查找,直到全局作用域。
JavaScript 中的作用域链的顶部永远是全局作用域,每当你调用一个函数时,它会创建一个新的执行上下文并将其加入到作用域链中。
2、局部作用域(函数作用域)
局部作用域中的变量和函数只能在特定的代码块中访问。
在 JavaScript 中,函数作用域是通过函数被调用的地方来确定的,而不是函数被定义的地方,这称为词法作用域。
3、块级作用域
在javascript中,除了全局作用域和函数作用域,还有块级作用域,在使用 let 和 const 定义变量时会产生块级作用域。
在 JavaScript 中,函数作用域和块级作用域是独立的,所以在块级作用域中使用 var 声明的变量会污染到所在函数作用域中,造成命名冲突。而 let 和 const 声明的变量只会在其所在的块级作用域中可见。
4、特殊作用域
JavaScript 中还有一种特殊的作用域,即闭包。闭包是一种非常强大的技术,可以用来实现私有变量、保持状态、缓存等功能。闭包是指通过一个函数引用其上层作用域中的变量来实现的,并且在函数返回后,仍然可以访问这些变量。这种特殊的作用域使得函数可以“记住”它所在的环境。
三、提升
JavaScript 中有两种变量声明方式:var 和 let/const, var 声明的变量会被提升到作用域顶部,而 let/const 声明的变量只能在它们声明的代码块中使用。
JavaScript 中的执行上下文和作用域与其他编程语言有着相似之处,但也有一些不同之处。
一个重要的不同之处是 JavaScript 中的作用域是动态的,可以在运行时通过改变作用域链来访问和修改变量。而其他语言中的作用域通常是静态的,在编译时就已经确定了。
另一个不同之处是 JavaScript 中的 this 对象是在运行时确定的,而不是在编译时确定的。这意味着 this 的值可能会在代码执行过程中发生变化,这在调试和理解 JavaScript 代码时需要特别注意。
JavaScript 中执行上下文和作用域的运行机制也是经典的单线程运行模式,这意味着 JavaScript 代码会在单个线程中执行,不能同时执行多个任务。
标签:执行,函数,4.2,作用域,JavaScript,上下文,变量 From: https://www.cnblogs.com/yuzhihui/p/17066531.html