个人笔记 不足请指正。

js在执行时

语法分析

在执行之前会通篇扫描 有没有语法错误

1.imply global 暗示全局变量,即任何变量,如果变量未经声明就复制,此变量就为全局所有。

2.一切声明的全局变量,全是window的属性

函数执行的前一刻:

1.创建AO对象

2.找形参和变量声明,将变量和形参名作为AO属性名,值为undefined

(函数声明整体提升,变量声明提升)

3.将实参值和形参统一

4.在函数体里面找函数声明,赋予函数体

执行js

了解执行上下文要先了解下边两点

1.栈

栈是类似于数组的一种数据结构

2.引用对象

如果变量是一个对象,实际上变量中存放的是对象的地址

执行上下文:某个函数或全局代码的执行环境,该环境中包含执行代码需要的所有信息

可以简单的理解为:执行上下文是一个对象,对象中包含了执行代码所需要的信息

当执行一个函数时,需要建立执行上下文,建立之后,才正式开始执行。

call stack(执行上下文栈):组织管理程序运行过程中的执行上下文。

执行上下文的内容

1.VO:variable object , 变量对象,存放的是函数或全局代码执行过程中需要用到的局部变量

2.scope:作用域

3.this

VO是一个对象,调用函数或执行全局代码时创建,创建一个vo,需要经过三步:

1.确定函数形参的值(包括arguments对象)

在函数中寻找数据是,会先从vo中查找,如果vo中不存在,在使用外层数据

AO :active object 执行栈顶上下文的vo

也有人叫VO叫GO,在这里是没有区别的

GO:Global Object

创建vo对象

1.确定形参值

2.确定函数中所有的函数字面量声明

1.该函数必须是字面量声明,字面量声明提取到vo后,可以认为该声明失效

2.如果当前vo中出现同名属性直接覆盖

3.确定函数中所有的变量声明(var),将其提取到上下文中,值为undefined

1.如果当前vo中出现同名属性,忽略

下面来做几道测试题

12行输出。//张三,张三

user1变量是一个对象,user1存放的是对象的地址

user2=user1  故指向同一个地址

当第10行改变name时 因为user1和user2指向同一个地址

故console.log(user1.name)输出的是张三

在实际开发中为了避免出现这种情况通常会对一个对象深拷贝在赋给另一个变量;

19执行,16输出1

输出。abc  ,123

试题3:

console.log(foo)//function

var foo="A";

console.log(foo);   //A

var foo=function(){

console.log("B")

}

console.log(foo);

foo();

function foo(){

console.log("C")

};

console.log(foo)

foo()

试题4:

var foo=1

function bar(a){

var a1=a;

var a=foo;

function a(){

console.log(a)

}

a1()

}

bar (3)

bar 里的函数a又一个vo建立了

vo{

}

bar的上下文

vo{

a:指向函数a,

a1:指向函数a,

}

全局上下文

vo{

bar :指向函数bar;

foo:1;

}

不同的作用域。就会生成不同的vo ao

转载于:https://juejin.im/post/5ce54c81518825314b6d6283

js原理之执行上下文相关推荐

  1. 进阶学习js中的执行上下文

    在js中的执行上下文,菜鸟入门基础 这篇文章中我们简单的讲解了js中的上下文,今天我们就更进一步的讲解js中的执行上下文. 1.当遇到变量名和函数名相同的问题. var a = 10; functio ...

  2. 以及其任何超类对此上下文都是未知的_浏览器原理系列 - JS执行上下文详解(一):作用域

    本文主要介绍JS执行上下文相关的内容,理解了JavaScript的执行上下文才能更好地理解JavaScript语言本身以及该语言一些特性,如变量提升.作用域和闭包. 一.作用域 1.1 作用域 作用域 ...

  3. JS深入--词法作用域、执行上下文与闭包

    文章目录 词法作用域 执行上下文与词法环境 闭包 闭包练习 作用域链 REF   个人博客文章同步地址 词法作用域   JS 使用的是词法作用域(或称为静态作用域),函数的作用域在定义的时候就决定了, ...

  4. 自学js第十天:JS对象和this和执行上下文

    复习数组基础方法 作用域 函数 小测试: <!DOCTYPE html> <html lang="en"><head><meta char ...

  5. JS基础篇之作用域、执行上下文、this、闭包

    前言:JS 的作用域.执行上下文.this.闭包是老生常谈的话题,也是新手比较懵懂的知识点.当然即便你作为老手,也未必真的能理解透彻这些概念. 一.作用域和执行上下文 作用域: js中的作用域是词法作 ...

  6. js学习笔记(执行上下文、闭包、this部分)

    1.函数的准备工作 函数在执行会进行一些准备工作,如创建一个"执行上下文"环境:执行上下文可以理解为当前代码的执行环境,它会形成一个作用域: 每个碰到可执行代码的时候都会进行这些& ...

  7. js变量后面加问号是什么_js没那么简单(1)-- 执行上下文

    前言 我为什么写这个文章?也许换个耳熟能详的话题会有更多人看吧.之前发了个tls感觉阅读量不行. 要讲ecma语法吗?我觉得还是不了吧,毕竟这些繁琐,枯燥,而且门槛低. 那讲什么好?讲一点我自己觉得大 ...

  8. 【学习笔记】深入理解js原型和闭包(11)——执行上下文栈

    继续上文的内容. 执行全局代码时,会产生一个执行上下文环境,每次调用函数都又会产生执行上下文环境.当函数调用完成时,这个上下文环境以及其中的数据都会被消除,再重新回到全局上下文环境.处于活动状态的执行 ...

  9. js执行环境作用域和闭包_JavaScript中执行上下文,提升,作用域和闭包的终极指南

    js执行环境作用域和闭包 It may seem surprising, but in my opinion the most important and fundamental concept to ...

最新文章

  1. Python基于statsmodels包构建多元线性回归模型:模型构建、模型解析、模型推理预测
  2. Linux下Apache+Tomcat 负载均衡
  3. JavaScript函数的各种调用模式
  4. error LNK2019解决办法
  5. nodejs 相关管理工具
  6. 在c语言中什么意思,\c在C语言中是什么意思?
  7. 公平锁的lock()方法走读
  8. 【博客话题】坚持的背影--记我的入门老师
  9. C语言实现随机抽取纸牌
  10. greenplum 查询出来的数字加减日期_POLA宝丽美白精华怎么查看生产日期保质期?保质期时间是几年的?查批号在哪里查?...
  11. GitHubamp;gitee图床网站源码
  12. 如何给main传参数
  13. SpringBoot非官方教程 | 第二十二篇: 创建含有多module的springboot工程
  14. 14. YAML(1)
  15. MapKit框架使用
  16. VS 2019 打包安装应用
  17. 滕州一中计算机竞赛,滕州市北辛中学被评为全国青少年信息学奥林匹克联赛优秀参赛学校...
  18. 深刻认识差模电压和共模电压
  19. 第二十七篇:稳定性之故障处理【初识故障与传播方式】
  20. IT桔子文飞翔:人工智能行业发展趋势

热门文章

  1. Linux无盘教程,如何无盘启动Linux
  2. golang 相互引用_golang go run undefined 同一个package中函数互相调用的问题
  3. java练习:模拟试下你斗地主的洗牌、发牌、看牌功能
  4. 小眼睛适合大框还是小框眼镜_北京潘家园眼镜城良心商家推荐
  5. 生物学专业_北京交通大学617生物化学20082011历年考研专业课真题汇编
  6. linux添加py自启动脚本_PyInstaller详解:将.py文件打包成exe文件
  7. java函数定义的要素_Java学习笔记八(方法)
  8. python web flask开发框架_Python Web 开发框架,Flask 与 Django那个更好
  9. .net使用httpclient获取http状态码_在 .NET Core 中结合 HttpClientFactory 使用 Polly(中篇)...
  10. 关于安徽赛区推广校赛的实施办法