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. 学习JDK之“Future机制==>多线程”

    什么是Future接口 Future是java.util.concurrent.Future,是Java提供的接口,可以用来做异步执行的状态获取,它避免了异步任务在调用者那里阻塞等待,而是让调用者可以 ...

  2. ctfhub web信息泄露备份文件下载(vim缓存 Ds-Store)

    Vim缓存 进入环境由于不懂得vim是什么借鉴大佬的博客 网页提示flag在index.php中我们按着这个思路去找 将文件保存下来因为是swp文件我们用kail进行打开 使用vim -r index ...

  3. ubuntu 安装 mysql mariadb

    本教程面向Ubuntu服务器,适用于Ubuntu的任何LTS版本,包括Ubuntu 14.04,Ubuntu 16.04,Ubuntu 18.04,甚至非LTS版本(如Ubuntu 17.10和其他基 ...

  4. Microservices

    Microservices What are Microservices? What are Microservices - microservices.io Microservices - mart ...

  5. elf,基于flexbox的响应式CSS框架

    官网地址:http://jrainlau.github.io/elf/项目地址:https://github.com/jrainlau/elf 介绍 取名为"精灵"的elf,是一个 ...

  6. JavaScript 遍历对象、数组总结

    在日常工作过程中,我们对于javaScript遍历对象.数组的操作是十分的频繁的,今天抽空把经常用到的方法小结一下,方便今后参考使用!   javaScript遍历对象总结     1.使用Objec ...

  7. CCF201812-2小明放学

    题目背景 汉东省政法大学附属中学所在的光明区最近实施了名为"智慧光明"的智慧城市项目.具体到交通领域,通过"智慧光明"终端,可以看到光明区所有红绿灯此时此刻的状 ...

  8. JSDOM基础

    JavaScript 通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素. HTML DOM 模型被构造为对象的树: HTML DOM 树 JavaScript 能够改变页 ...

  9. JS核心知识点梳理——闭包

    闭包 闭包这个东西咋说呢,不同的程序员,不同的资料都有不同的解释,你可以把它理解成一个函数,也可以把它理解函数+执行环境. 我们这里不纠结闭包的定义,而是关注闭包的现象,应用,再结合相关面试题去攻克它 ...

  10. BootstrapBlazor实战 Chart 图表使用(1)

    BootstrapBlazor组件 Chart 图表介绍 通过给定数据,绘画各种图表的组件 本文主要介绍三种图表使用:折线图,柱状图,饼图 1.新建工程 新建工程b06chart,使用 nuget.o ...