IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 浏览器中的JavaScript执行机制 -> 正文阅读

[JavaScript知识库]浏览器中的JavaScript执行机制

一个变量包含创建、初始化、赋值三个阶段
function的创建、初始化和赋值均会被提升。
var的创建和初始化被提升,赋值不会被提升。
let的创建被提升,初始化和赋值不会被提升。

变量提升

函数和变量声明部分都会提升到代码开头。
变量声明会设置初始值 undefined
函数则分成以下两种
在这里插入图片描述

JS 的执行流程

  1. 编译阶段
    编译完后会生成 执行上下文 和 可执行代码
    执行上下文里包含变量环境、词法环境、this、outer
    其中变量环境保存了变量提升的内容
  2. 运行阶段
    在变量环境中查找自定义的变量和函数

如果是同名的函数,JavaScript编译阶段会选择最后声明的那个。
如果变量和函数同名,那么在编译阶段,变量的声明会被忽略

何为执行上下文

JS 执行全局代码、调用函数或者调用 eval 函数时,会编译代码并创建执行上下文,里头包含了变量环境和词法环境变量、this、outer
在这里插入图片描述

调用栈

用来管理函数调用关系的一种数据结构。
管理执行上下文的栈就叫作执行上下文栈,也叫调用栈。
函数编译时,会创建执行上下文,并推入栈,函数执行完后就会出栈。

作用域

  • 作用域就是变量与函数的可访问范围,即作用域控制着变量和函数的可见性和生命周期。
  • es6 之前只有全局作用域跟函数作用域,es6 之后加入了函数作用域
  • es6 采用的是词法作用域:即是由代码中函数声明的位置来决定的,而不是执行时才确定的

块级作用域

  • 块级作用域是通过词法环境的栈结构来实现的,而变量提升是通过变量环境来实现,通过这两者的结合,JavaScript 引擎也就同时支持了变量提升和块级作用域了
  • 管理执行上下文的叫调用栈。
  • 变量提升是通过执行上下文里的变量环境来实现的。
  • 块级作用域是通过执行上下文里的词法环境的栈结构来实现的。
    在这里插入图片描述

作用域链

是按自己所在的执行上下文的词法环境=》自己所在执行上下文的变量环境=》变量环境的 outer 所指向的执行上下文的词法环境=》变量环境的 outer 所指向的执行上下文的变量环境
一直沿着 outer 查找,直到全局执行上下文,没找到就报错
在这里插入图片描述

闭包

内部函数引用了外部函数里的变量,并返回该内部函数,这样当外部执行完之后会出栈,但由于内部函数引用外部函数的变量仍然保存在内存中,将这些变量的集合称为闭包
在这里插入图片描述

产生闭包的核心有两步:第一步是需要预扫描内部函数;第二步是把内部函数引用的外部变量保存到堆中。

JS 机制

全局上下文中的 this: 非严格模式下 this 指向 window,严格模式下指向 undefined
函数执行上下文中的 this:默认指向 window
可以通过 call,apply,bind 更改 this 指向。
对象调用方法时,this 指向该对象
构造函数里 this 指向新对象
ES6 中的箭头函数并不会创建其自身的执行上下文,所以箭头函数中的 this 取决于它的外部函数

参考链接

浏览器工作原理与实践

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:22:02  更:2021-08-31 15:22:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 19:21:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计