上下文环境的初始化在代码执行前完成

  • JS有三种作用域:全局作用域、函数作用域、eval作用域(不常用,不做介绍)。

  • 在JS代码执行前,首先会对这三种作用域进行上下文环境的准备工作,准备内容如下:

    1. 全局作用域的上下文准备工作

      • 将全局变量设为undefined
      • 将函数表达式的值设为undefined
      • 为函数声明直接赋值
      • 将window对象赋给this
    2. 函数作用域的上下文准备工作
      • 确定自由变量的作用域
      • 为函数的参数和arguments对象赋值
      • 将局部变量的值设为undifined
      • 将函数表达式的值设为undifined
      • 为函数声明直接赋值
//将全局变量的值设为undefined
console.log(a); //undefined
var a = 1;//将window对象赋给this
console.log(this);//将函数表达式的值设为undefined
console.log(fn1);//undefined
var fn1 = function(){//……
}//为函数声明直接赋值
console.log(fn2); //输出函数的代码
function fn2(){//……
}//函数作用域
function fn3(b,c){//确定自由变量的作用域console.log(a);//为局部变量赋上undefinedconsole.log(x);//undefinedvar x = 123;//为函数的参数赋值console.log(b,c); //2,3//为arguments赋值console.log(arguments); //[2,3]
}fn3(2,3);
  • 函数作用域中this的是在JS运行时才能确定,而全局作用域中的this在准备上下文环境的时候就确定了(window)。

  • 定义函数有两种方法:函数声明式定义、函数表达式定义,如下所示:

//函数声明式定义
function fn(a,b){//……
}//函数表达式定义
var fn = function(a,b){//……
}
  • 两者区别如下:

    • 若采用函数声明式定义,函数调用语句和函数声明语句的先后次序无关。
      因为在代码运行前的准备上下文环境过程中,函数的初始化已经完成,所以运行时无论函数调用语句在哪儿,JS编译器都能调用这个函数。

    • 若采用函数表达式来定义函数,则函数定义一定要在函数调用语句之前!
      因为在这种方式中,函数的初始化是在运行时完成,在代码运行前只是将undefined赋给函数变量。因此在这种情况下,函数调用语句必须在函数定义后。

  • JS中作用域只有三种:全局作用域、函数作用域、eval作用域。除此之外就没有作用域了!如:for、if、while等都不是独立的作用域! 因此在里面定义的局部变量都属于其所属的外层作用域。

稳扎稳打JS——执行上下文相关推荐

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

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

  2. 此上下文中不允许函数定义。_面试官:那我们来说说执行上下文吧

    当 JS 引擎处理一段脚本内容的时候,它是以怎样的顺序解析和执行的?脚本中的那些变量是何时被定义的?它们之间错综复杂的访问关系又是怎样创建和链接的?要解释这些问题,就必须了解 JS 执行上下文的概念. ...

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

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

  4. js原理之执行上下文

    个人笔记 不足请指正. js在执行时 语法分析 在执行之前会通篇扫描 有没有语法错误 1.imply global 暗示全局变量,即任何变量,如果变量未经声明就复制,此变量就为全局所有. 2.一切声明 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. ibm linux mq 发送消息_RabbitMq、ActiveMq、Kafka和Redis做Mq对比
  2. 国内有没有能媲美Jira的测试管理工具?我们找国内产品来测评一下
  3. 数据缺失、混乱、重复怎么办?最全数据清洗指南
  4. DFS、DTFT、DFT、 FFT的定义和区别
  5. 2017 数据驱动大会赠票赠书名单出啦!
  6. 【Javascript】 DOM节点
  7. Python 获取md5值(hashlib)
  8. 机器学习入门框架scikit-learn
  9. PostgreSQL学习手册(十一) 数据库管理
  10. Mac小技巧:在mac上怎么把png转换成jpg
  11. 表多个字段与其他表关系,left join on 顺序
  12. Windows 10 修改域用户密码
  13. linux锐捷认证成功无法上网,主编传授win10系统锐捷认证成功但是却无法上网的方法...
  14. 2022年6月 青少年软件编程(Python) 等级考试试卷(二级)
  15. android 恢复出厂设置流程分析,android恢复出厂设置流程概括
  16. sql server 找到刚刚插入的indentify的数字
  17. K8S异常之Unable to update cni config err=no vaild network found in /etc/cni/net.d
  18. 将js中Ajax设置为同步请求
  19. SHT30 温湿度传感器,检验不通过,通讯不稳定(经常读到FF)问题处理
  20. 我知道互联网不相信眼泪,但是这次我没忍住

热门文章

  1. 食品工程原理之流体动力学
  2. 并发-分布式锁质量的前世今生
  3. twitter如何以图搜图_中学智慧校园如何设计?可以看看这整套的校园CAD设计方案...
  4. 真容慧表NxCells 构建模板 管理数据表详解
  5. 2019年高交会于11月13-17日在深圳会展中心举行
  6. Unity中人物描边的“近大远小”优化
  7. 月赚3000不是梦(谷歌广告联盟)
  8. Opencv实现停车位识别
  9. kelvin模型蠕变方程_基于改进Kelvin模型的三维蠕变损伤模型研究
  10. avc水平什么意思_西方经济学中AVC是什么意识?