`
desert3
  • 浏览: 2139887 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Javascript函数、变量的初始化顺序、Javascript上下文环境

 
阅读更多
参考: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

分享到:
评论

相关推荐

    JavaScript 变量提升 | 执行上下文 | 作用域

    文章目录变量提升执行上下文全局执行上下文函数执行上下文执行上下文栈作用域例题举个栗子 执行上下文栈:举个栗子 变量提升+执行上下文栈:举个栗子 预处理顺序举个栗子 预处理举个栗子 顺序执行举个栗子 作用域举...

    跟我学习javascript的执行上下文

    在这篇文章里,我将深入研究JavaScript中最基本的部分——执行上下文(execution context)。读完本文后,你应该清楚了解释器做了什么,为什么函数和变量能在声明前使用以及他们的值是如何决定的。 1、EC—执行环境...

    JavaScript详解(第2版)

     14.9.3 继承和上下文选择器   14.10 定位元素和层   14.10.1 绝对定位   14.10.2 〈div〉容器   14.10.3 绝对定位   14.10.4 相对定位   14.10.5 z索引和三维   14.11 如何与JavaScript融合...

    Coffeescript中文手册

    函数上下文 11 对象字面量与数组定义 11 流程控制 12 字符串插值法 14 循环和列表解析 14 数组 15 别名和存在操作符 16 类 17 实例属性 18 静态变量 19 继承与Super 20 Mixins 21 扩展类 22 CoffeeScript惯用法 24 ...

    Acktie-Mobile-iOS-QR-Encoder:使用 Appcelerator 从您的移动设备生成二维码

    此选项初始化 QR 编码器。 在此选项中,您可以设置大小、边距和校正级别(详见下文)。 特性 以下是可以传递给打印函数的有效属性。 尺寸(可选) 此属性用于设置返回的 QR 编码的 PNG blob 的大小。 大小是具有匹

    learn-angularjs

    这是学习《AngularJS权威指南》并测试1.4版本中的变化的练习项目run 用于应用的初始化对表达式进行的任何操作,都会在其所属的作用域内部执行,因此可以在表达式内部调用那些限制在此作用域内的变量,并进行循环、...

    react-test-env:React测试环境设置

    当React被加载时,它执行检查以检测它是否在文档的上下文中执行。 因此,在测试React组件或使用JSDOM模拟DOM时,必须确保在加载React之前初始化文档。 该模块的目的是减少此样板并在单个调用中创建预期的全局变量。 ...

    python入门到高级全栈工程师培训 第3期 附课件代码

    02 上下文管理协议 04 异常的构成简单了解 05 描述符应用 08 类的装饰器的基本原理 09 类的装饰器增强版 10 类的装饰器的应用 11 自定制property 12 自定制property流程分析 13 自定制property实现延迟计算功能 14 ...

    WebGL编程指南压缩包

    初始化着色器 29 顶点着色器 31 片元着色器 33 绘制操作 34 WebGL 坐标系统 35 用示例程序做实验 37 绘制一个点(版本2) 38 使用attribute 变量 38 示例程序(HelloPoint2.js) 39 获取attribute 变量的...

    WebGL编程指南

    初始化着色器 29 顶点着色器 31 片元着色器 33 绘制操作 34 WebGL 坐标系统 35 用示例程序做实验 37 绘制一个点(版本2) 38 使用attribute 变量 38 示例程序(HelloPoint2.js) 39 获取attribute 变量的...

    webgl编程指南及源码1/2

    初始化着色器 29 顶点着色器 31 片元着色器 33 绘制操作 34 WebGL 坐标系统 35 用示例程序做实验 37 绘制一个点(版本2) 38 使用attribute 变量 38 示例程序(HelloPoint2.js) 39 获取attribute 变量的...

    webgl编程指南及源码2/2

    初始化着色器 29 顶点着色器 31 片元着色器 33 绘制操作 34 WebGL 坐标系统 35 用示例程序做实验 37 绘制一个点(版本2) 38 使用attribute 变量 38 示例程序(HelloPoint2.js) 39 获取attribute 变量的...

    微信小程序 this和that详解及简单实例

    原因是,在javascript中,this代表着当前对象,会随着程序的执行过程中的上下文改变,在wx.request({});方法的回调函数中,对象已经发生改变,所以已经不是wx.request({});方法对象了,data属性也不存在了。官方的...

    Tcl_TK编程权威指南pdf

    初始化扩展模块 组件的数据结构 组件的类命令 组件实例命令 配置和重新配置属性 指定组件属性 时钟的显示 窗口事件过程 最后的清除工作 第47章 c函数库概览 tclc函数库概览 tk c函数库概览 第7部分 各...

    KC_EJ_NodeJS_Express_Mongo:来自Master KeepCoding的Node.js,Express和Mongo练习

    解释器会将声明移到其上下文的开头,将初始化保留在原先的位置。 建议:如果代码很复杂,请在开头声明变量 本练习通过控制台中显示的功能展示提升的工作原理,然后展示应用提升后的外观。 基本服务器 文件夹01_...

Global site tag (gtag.js) - Google Analytics