执行上下文

第一部分:执行上下文

1.javascript在执行一个代码段之前,都会进行这些“准备工作”来生成执行上下文

做了哪些准备工作

image.png

在全局下,没有参数,所以就没有下边的第一项,

看下边的例子:

image.png

解析:函数执行时,
a)先填充函数的参数,得到 x且得到值10,y:undefined;z:undefined,
b)函数声明,function x(){},且覆盖了原来的x:10,
再看下边的例子

解析: a)先填充参数,x:undefined;y:undefined;z:undefined; b)函数申明,在vo对象里有了function fn(){}; c)变量声明,因为变量fn和之前的函数名一样,所以此处的fn变量被忽略。

第二部分:执行上下文栈

执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境。
当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文
环境。处于活动状态的执行上下文环境只有一个。
其实这是一个压栈出栈的过程——执行上下文栈。如下图:

看代码演示

[内容摘自]http://www.cnblogs.com/wangfupeng1988/p/3989357.html

第三部分

情况一:
    function fn(){
        var a=x=y=1;
    }
//    console.log(a)//报错
    console.log(x)//报错
因为变量在函数内部声明,没有调用函数,所以.....

情况二:
    function fn(){
        var a=x=y=1;
    }
    fn()
   // console.log(a)  //报错
    console.log(x)  //1
情况三:
 var x =1;y=0;z=0
    function add(x){x=x+1}
    y=add(x);
    function add(x){x=x+3}
    z=add(x);
//函数没有返回值,所以....
    console.log(y)//undifined
    console.log(z)//undifined
情况四:
 var x =1;y=0;z=0
    function add(x){x=x+1;return x}
    y=add(x);
    function add(x){x=x+3;return x}
    z=add(x);
    console.log(y)//4
    console.log(z)//4
因为:
function add(x){x=x+3;return x}
    var x =1;y=0;z=0
    y=add(x);
    z=add(x);
    console.log(y)
    console.log(z)
情况五:
 console.log(a);//函数,函数和变量声明提前,此结果说明函数声明比变量更先;
    var a =3;
    function a(){
        console.log(a)//不执行,函数没调用
        var a= 3;
    }
    console.log(a);//3

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏苦逼的码农

Shell编程 --- 变量

(2).如果按作用范围的话,可分为自定义变量和环境变量(后面会将自定义变量和环境变量)。

11850
来自专栏轮子工厂

一篇文章帮你解决中文乱码问题---JavaWeb中文编码问题全面解析

这就是为什么我们在浏览器的地址栏中能看到中文,但是把地址拷贝出来后中文就变成了一些奇怪的串了。

90440
来自专栏Jackson0714

【.Net底层剖析】3.用IL来理解属性

34770
来自专栏开源优测

移动测试Appium之API手册

移动测试Appium之API手册 前言 本文对Appium Python Client中webdriver.py代码进行分析说明。 笔者使用python3.6版...

46390
来自专栏小樱的经验随笔

【批处理学习笔记】第十五课:语句结构(1)

    类似于C语言,批处理也有它的语句结构。批处理的语句结构主要有选择结构(if语句)、循环结构(for语句)等。   if语句(选择结构)     if语...

29490
来自专栏后端技术探索

实用篇-无处不在的Location

location配置是nginx模块化配置中最出色的一个设计,几乎所有nginx的业务场景都要通过书写多个location配置来顺应业务需要。语法配置和执行规则...

12520
来自专栏haifeiWu与他朋友们的专栏

Java命令之javap初探

javap是jdk自带的一个工具在jdk安装目录的/bin下面可以找到,可以对代码反编译,也可以查看java编译器生成的字节码,对代码的执行过程进行分析,了解j...

12720
来自专栏WindCoder

PHP内存中的对象和引用简介

我首次起草这篇文章是在备战我的PHP认证时,以便更好地了解PHP如何管理内存中的变量和对象。经过大量研究,我意识到找到我的问题的答案并不容易,所以一旦我完成了,...

18510
来自专栏农夫安全

【weakfilescan】敏感文件扫描工具

weakfilescan 基于爬虫,动态收集扫描目标相关信息后进行二次整理形成字典规则,利用动态规则的多线程敏感信息泄露检测工具,支持多种个性化定制选项,包括...

49380
来自专栏desperate633

共享资源的线程安全性Local VariablesLocal Object ReferencesObject Member VariablesThe Thread Control Escape Rul

如果某段代码可以正确的被多线程并发的执行,那么我们就称这段代码是线程安全的,如果一段代码是线程安全的那么他肯定不会出现资源竞速的问题。资源竞速的问题只发生在多个...

6310

扫码关注云+社区

领取腾讯云代金券