首页 > 编程语言 >4.2 JavaScript 执行上下文与作用域

4.2 JavaScript 执行上下文与作用域

时间:2023-01-24 23:33:21浏览次数:42  
标签:执行 函数 4.2 作用域 JavaScript 上下文 变量

一、执行上下文

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

相关文章

  • JavaScript学习笔记—递归
    1.编写递归函数,一定要包含两个要件编写递归函数,一定要包含两个要件(1)基线条件:递归的终止条件(2)递归条件:如何对问题进行拆分2.递归的核心思想将一个大的问题拆分为一个......
  • JavaScript简单了解
    JavaScriptJavaScript是一门跨平台、面向对象的脚本语言(无需编译,直接解释运行),来控制网页行为的,它能使网页可交互W3C标准:​ 结构:HTML​ 表现:CSS​ 行为:JavaSc......
  • JavaScript学习笔记—闭包
    1.定义闭包就是能访问到外部函数作用域中变量的函数2.什么时候使用当需要隐藏一些不希望被别人访问的内容时就可以使用闭包3.构成要件(1)函数的嵌套(2)内部函数要引用......
  • JavaScript: div,textarea set or get value
    <!doctypehtml><html><head><metacharset="utf-8"><metaname="viewport"content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,u......
  • 4.1 JavaScript 原始值与引用值
    JavaScript中有两种类型的值:原始值和引用值。原始值是不可变的,如Undefined、Null、Boolean、Number、String和Symbol。当将一个原始值赋值给另一个变量时,实际上是将该值......
  • JavaScript 自增和自减运算符
    JavaScript中有两种方法来自增或自减一个变量的值,分别是自增运算符和自减运算符。自增运算符(++):将变量的值增加1。letx=5;x++;//x现在的值为6自减运算符(--):将......
  • Javascript Basic
    Javascriptisa dynamicallytyped, weaklytypedand interpreted high-levelprogramminglanguage.InterestingJavaScriptFeaturesWe'llgoovertheseinmor......
  • JavaScript基础
    快速入门1.引入JavaScript1、内部标签<script>//注释</script> 2、外部引入abc.js//...test.html<scriptsrc="abc.js"></script> 测试代码<!DOCTYPE......
  • JavaScript 解决冒泡事件导致的性能问题
    在JavaScript中,当有大量的子元素都需要绑定同一个事件时,冒泡事件可能会导致性能问题。这时可以使用以下方法来解决性能问题。使用事件委托:通过在父元素上绑定事件监听......
  • JavaScript 事件委托
    事件委托是一种事件处理方式,它可以通过在父元素上绑定事件,然后利用事件冒泡的特性,让父元素处理子元素上的事件。这样做的好处是可以减少事件监听器的数量,提高性能。在Jav......