参考:
Initialization of functions and variables
Javascript函数、变量的初始化顺序:
1,预执行期:
- a.函数声明被初始化,放置到全局变量(全局上下文环境)window中
- b.var声明的变量被放置到全局变量(全局上下文环境)window、或者var所在的上下文环境如函数内部中,初始值为undefined
- c.因此函数声明的函数名字、var声明的变量名字不能重复
2,执行期:
- a.当代码执行到时,变量赋值才会发生。非var声明的变量也只在代码执行到后才被创建,然后放置到全局变量(全局上下文环境)window中
Javascript上下文环境:
全局上下文环境:Window
函数上下文环境:在函数内部使用var声明的变量是本地变量,出了函数范围后会被垃圾回收。
闭包不会被垃圾回收。
即var声明的变量,在
预执行期都会被放到相应的
上下文环境中,然后在执行期,相应上下文环境中的变量会被赋值。
{},for循环等不存在自己的上下文环境,如下:
// 下面2段变量声明的效果是一样的,因为在预执行期,var声明的变量都会被创建并赋值为undefined.
var i = 1
{
i = 5
}
i = 1
{
var i = 5
}
// for循环没有自己的上下文环境,其使用的上下文环境是for循环代码所在的上下文环境。
// 而在Java、C等语言中,for循环内部的变量在循环结束后是不在存活的
for(var i=0; i<5; i++) { }
alert(i) // 5, variable survives and keeps value
分享到:
相关推荐
1. **创建阶段**:在这个阶段,执行上下文会被初始化,其中的变量对象会被创建并填充。对于函数执行上下文来说,还会为函数的参数分配内存空间。 2. **活动阶段**:在这个阶段,执行上下文处于活跃状态,代码被执行...
最后,JavaScript在处理变量对象时,会有一套变量初始化规则,这些规则定义了变量对象中的各种条目是如何被添加和初始化的。例如,在函数上下文中,参数首先被初始化,然后是函数声明,最后是变量声明。 通过理解...
在这个阶段,全局环境仍然存在,但函数执行上下文会创建一个新的词法环境来存储函数内的变量和函数。 四、函数执行 在函数执行上下文中,变量 `g` 被赋值为 `20`。函数 `multiply` 执行完成后,返回值被存储在变量...
执行上下文是代码在特定环境中运行的抽象表示,它定义了变量、函数以及`this`关键字的行为。执行上下文主要有三种类型:全局执行上下文(默认的运行环境)、函数执行上下文(每次执行函数时创建)和`eval`执行上下文...
执行环境的重要性在于它提供了代码执行的上下文,包括有权访问的变量和函数。 二、作用域和作用域链 作用域是指在程序中定义变量的区域,它决定了变量的作用范围。在JavaScript中,函数作用域允许在函数内部定义的...
当一个函数被调用时,JavaScript引擎会为该函数创建一个新的执行上下文。执行上下文包括了变量环境、作用域链和this绑定等关键组成部分。了解这些概念有助于理解函数如何工作以及如何有效地使用它们。 #### 示例...
执行上下文是JavaScript代码执行的环境,包括全局上下文、函数上下文和异步上下文。每个执行上下文都有自己的变量对象(在ES6中改为词法环境),存储变量和函数声明。当函数被调用时,新的执行上下文被推入栈中,...
在执行阶段,变量对象会被初始化,即对变量进行赋值,执行函数调用等操作。执行上下文会按照先进后出的原则存储在函数调用栈中,栈底始终是全局执行上下文,只有在浏览器关闭时才会消失。每次函数调用都会创建一个...
在进入执行上下文时,VO会被初始化,创建参数对象、函数声明和变量对象,其中未传入的函数参数也会被初始化为`undefined`。 理解执行上下文对于调试和优化JavaScript代码至关重要,它解释了为什么可以在声明之前...
词法环境记录了函数的局部变量和参数,而变量环境处理变量的声明和初始化。 执行阶段则涉及实际的代码执行,包括变量和函数的求值。在执行阶段,所有的变量和函数声明都会被提升到它们所在的作用域顶部,这就是所谓...
执行上下文是JavaScript引擎在执行代码时创建的一种环境,用于跟踪执行过程中的状态。 - **执行上下文的类型**: - **全局执行上下文**:每个窗口或标签页都有一个全局执行上下文。 - **函数执行上下文**:每当...
总结来说,执行上下文是JavaScript语言中一个非常基础且重要的概念,它不仅定义了代码执行的环境,还关系到变量和函数作用域的规则。理解执行上下文的创建过程和原理,对于深入掌握JavaScript的作用域、闭包、this...
this 关键字的指向是它所在上下文(定义时的位置)的环境,与普通函数不同! 一元加号和boolean类型 一元加号会尝试将 boolean 类型转换为数字类型。true 被转换为 1,false 被转换为 0。字符串是一个真值。我们...
在JavaScript中,每个函数都有自己的执行上下文,这意味着函数内的变量和函数只在该函数内部可见,不会污染全局作用域。例如,上述例子中的`makeCounter`函数创建了一个私有的`i`变量,每次调用返回的内部函数时,`i...
变量提升时,变量的声明会被移动到作用域的顶部,但是初始化并不会被提升,只提升声明部分。 举个例子,代码“console.log(i); var i=2;”运行时不会产生ReferenceError错误,因为变量i的声明被提升了,而赋值并...
JavaScript函数的执行过程是JavaScript语言中的核心概念,它涉及到作用域、作用域链、执行上下文和变量对象等多个重要组成部分。下面将详细解释这个过程。 首先,每一个JavaScript函数本质上都是Function对象的一个...
6. this关键字:在JavaScript中,this关键字用来引用当前执行上下文的对象。在构造函数、普通函数和箭头函数中,this的指向是不同的。理解this关键字有助于掌握JavaScript中对象的使用和方法的调用。 7. 高阶函数:...