JS 内存机制

基本类型:
String | Boolean | Undefined | Number | Nll | Symbol
数据保存在“栈”——先进后出。

数据类型:
Array | Object | Function | Date | Error ……
数据保存在“堆”——先进先出。

要访问“堆”内存的引用数据类型时,实际上是首先从栈中获取该对象的指针,
然后再从堆内存中取的我们需要的数据。

所以说:基本类型赋值相互不影响,引用类型赋值,会影响原对象。

var arr = [1,2,3];
var arr2 = arr;
arr2[3] = 4;
console.log(arr); // arr | arr2 同指向一个内存地址

Event Loop

事件机制:所有 JS 代码运行都是放入执行栈中执行,遵循进栈和出栈,直到栈被清空。

执行栈
JS 代码在运行前都会创建执行上下文,也可以理解为执行环境,JS 中有三种执行上下文:
1、全局执行上下文,默认的,在浏览器中是 window 对象;
2、函数执行上下文,JS 的函数每当被调用时都会创建一个上下文;
3、Eval 执行上下文,eval 函数会产生自己的上下文。

常用的数据结构
数组(Array) | 栈(Stack) | 队列(Queue) | 堆(Heap) | 链表(Linked List) | 树(Tree) | 图(Graph) | 散列表(Hash)

JS 执行过程

javascript 引擎基本原理可以把JS的源代码转换成高效、优化的代码,这样就可以通过浏览器解析甚至可以被嵌入到应用当中。

javascript 的引擎作用简单来讲就是能够读懂 javascript 代码,并且准确地给出运行结果的程序。

每个 JavaScript 引擎都实现了一个版本的 ECMAScript。
为什么会有那么多引擎,因为他们每个都被设计到不同 web 浏览器或像 Node.js 那样的运行环境中——他们唯一的目标是读取和编译 javascript 代码。

常见的 javascript 引擎如下:
Mozilla 浏览器 ----> 解释引擎为 Spidermonkey(由 C 语言实现)
Chrome 浏览器 ----> 解析引擎为 V8(由 C++ 实现)
Safari 浏览器 ----> 解析引擎为 JavaScriptCode(C/C++)
IE and Edge ----> 解析引擎为 Chakra(C++)
Node.js ----> 解析引擎为 V8

浏览器常驻线程:
JS 引擎线程:负责 JS 的解析和执行;
定时触发器线程:处理定时事件,比如 setTimeout | setInterval;
事件触发线程:处理 DOM 事件;
异步 http 请求线程:处理 http 请求。

浏览器渲染引擎
Chrome | Safari | Opera —— Webkit 引擎;
IE —— Trident 引擎;
FireFox —— Gecko 引擎;

浏览器 JS 引擎
Chrome —— V8
FireFox —— SpiderMonkey
Safari —— JavaScriptCore
IE —— Chakra

预编译
1、预编译首先是全局预编译,函数体未调用时是不进行预编译的;
2、只有 var 和 function 声明会被提升;
3、在所在的作用域会被提升,不会扩展到其他的作用域;
4、预编译后会顺序执行代码;

<script>
{
consol;
console.log("代码段1");
}
{
console.log("代码段2");
}
console.log("上面有语法出错,这里<script>的代码段都不能运行了");
</script>
<script>
console.log("下一个<script>代码段能执行,不受上面影响");
</script>

作用域

ES5 的 var 在 if 和 for 没有块级作用域概,所以很多时候需要借助 function 的作用域来解决应用外面变量问题。
ES6 加入 let, let 有 if 和 for 块级作用域。

JS 一些概念的更多相关文章

  1. Node.js回调概念

    什么是回调? 回调是一个异步等效的功能.在完成特定任务回调函数被调用. Node大量使用了回调.Node的所有的API都支持回调这样的一种方式. 例如,一个函数读取一个文件可能开始读取文件,并使得下一 ...

  2. JS基础概念

    JS基础概念 1. 算法及流程图 算法类型:1.算数算法:2.事务性算法(解决某个问题的方法和先后顺序). JS语法概述 1. 引入JS的方法 1.用<script src="&quo ...

  3. js 的概念和声明-js 的变量-js 的运算符和逻辑结构-js 的数组

    js 的概念和声明Js的概念和声明:问题:在网页的发展历程中,发现网页不能对用户的数据进行自动校验,和提供一些特效造成用户体验极差解决:使用JavaScript作用:可以让网页和用户之间进行直接简单的 ...

  4. 学好js,这些js函数概念一定要知道

    函数创建方式 1.声明方式 例如:function consoleTip (){ console.log("tip!"); } 2.表达式方式 例如:var consoleTip ...

  5. Node.js的概念与应用

    转:http://blog.jobbole.com/100058/?utm_source=blog.jobbole.com&utm_medium=relatedPosts Node.js 是什 ...

  6. js闭包概念

    含义:闭包是一个概念,它描述了函数执行完毕内存释放后,依然内存驻留的一个现象,只要把握这个核心概念,闭包就不难理解了 function a(){      var i=0;      function ...

  7. 一眼看穿👀JS基本概念

    前段时间忙,好久没更新了,继续梳理基础知识这期总结的是JS的基本概念 标识符 所谓的标识符是指变量,函数属性的名字,或者函数的参数 第一个字符必须是一个字母,下划线(_)或者一个美元符号($),其他字 ...

  8. js 基础概念

    一 执行上下文 和 执行上下文栈 执行上下文:一段javascript代码执行前的准备工作 问题一:js引擎遇到怎样一段代码才会做"准备工作呢"? 可执行代码类型:全局代码.函数代 ...

  9. 3.1 js基本概念

    js中的语法大量借鉴于C以及其他类C语言(Java,Perl). js中一切(变量.函数名.操作符等等)都区分大小写.如"var a;"中的变量a跟"var A;&quo ...

  10. js,jquery概念理解

    js,jquery都是一种脚本语言,编写代码,实现页面的dom操作,特效等功能. 区别: 1.jquery"写的更少,做的更多"; 2.使用jquery需要导入jquery文件. ...

随机推荐

  1. HttpServletRequest.getInputStream()多次读取问题

    转自:https://www.jianshu.com/p/85feeb30c1ed HttpServletRequest.getInputStream()多次读取问题   背景 使用POST方法发送数 ...

  2. 遇到问题之“postman报Unsupported Media Type: Content type 'text/plain;charset=UTF-8' not supported”

    postman报Unsupported Media Type: Content type 'text/plain;charset=UTF-8' not supported postman之所以报Uns ...

  3. STM32 HAL库与标准库的区别_浅谈句柄、MSP函数、Callback函数

    最近笔者开始学习STM32的HAL库,由于以前一直用标准库进行开发,于是发现了HAL库几点好玩的地方,在此分享. 1.句柄在STM32的标准库中,假设我们要初始化一个外设(这里以USART为例)我们首 ...

  4. 在网页中预览excel表格文件

    项目需求在前端页面中实现预览excel表格的功能,上网了解之后大致总结为一下几种方法. 1.office文档转换为pdf,再转swf,然后通过网页加载flash进行预览 2.通过 xlsx.js,js ...

  5. 小程序TAB列表切换内容动态变化,scrollview高度根据内容动态获取

    滑动tab选项卡 一.在小程序里面tab选项卡是用的是自带的swiper组件,下面直接上代码 <view class="container"> <view cla ...

  6. 【每日日报】第三十二天---DataOutputStream写文件

    1 今天继续看书 DataOutputStream写文件 1 package File; 2 import java.io.IOException; 3 import java.io.FileOutp ...

  7. PAT B1076 Wifi密码

    题目描述: 下面是微博上流传的一张照片:"各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B-2:C-3:D-4:请同 ...

  8. Python Turtle库绘制表盘时钟

    运行效果: 源代码: 1 # coding=utf-8 2 3 import turtle 4 from datetime import * 5 6 # 抬起画笔,向前运动一段距离放下 7 def S ...

  9. 微信小程序下拉加载和上拉刷新两种实现方法

    方法一:onPullDownRefresh和onReachBottom方法实现小程序下拉加载和上拉刷新 首先要在json文件里设置window属性 设置js里onPullDownRefresh和onR ...

  10. 1.c语言非递归乘法表(帧栈理解)

    1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <stdbool.h> 4 5 typedef stru ...