JS 一些概念
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 一些概念的更多相关文章
- Node.js回调概念
什么是回调? 回调是一个异步等效的功能.在完成特定任务回调函数被调用. Node大量使用了回调.Node的所有的API都支持回调这样的一种方式. 例如,一个函数读取一个文件可能开始读取文件,并使得下一 ...
- JS基础概念
JS基础概念 1. 算法及流程图 算法类型:1.算数算法:2.事务性算法(解决某个问题的方法和先后顺序). JS语法概述 1. 引入JS的方法 1.用<script src="&quo ...
- js 的概念和声明-js 的变量-js 的运算符和逻辑结构-js 的数组
js 的概念和声明Js的概念和声明:问题:在网页的发展历程中,发现网页不能对用户的数据进行自动校验,和提供一些特效造成用户体验极差解决:使用JavaScript作用:可以让网页和用户之间进行直接简单的 ...
- 学好js,这些js函数概念一定要知道
函数创建方式 1.声明方式 例如:function consoleTip (){ console.log("tip!"); } 2.表达式方式 例如:var consoleTip ...
- Node.js的概念与应用
转:http://blog.jobbole.com/100058/?utm_source=blog.jobbole.com&utm_medium=relatedPosts Node.js 是什 ...
- js闭包概念
含义:闭包是一个概念,它描述了函数执行完毕内存释放后,依然内存驻留的一个现象,只要把握这个核心概念,闭包就不难理解了 function a(){ var i=0; function ...
- 一眼看穿👀JS基本概念
前段时间忙,好久没更新了,继续梳理基础知识这期总结的是JS的基本概念 标识符 所谓的标识符是指变量,函数属性的名字,或者函数的参数 第一个字符必须是一个字母,下划线(_)或者一个美元符号($),其他字 ...
- js 基础概念
一 执行上下文 和 执行上下文栈 执行上下文:一段javascript代码执行前的准备工作 问题一:js引擎遇到怎样一段代码才会做"准备工作呢"? 可执行代码类型:全局代码.函数代 ...
- 3.1 js基本概念
js中的语法大量借鉴于C以及其他类C语言(Java,Perl). js中一切(变量.函数名.操作符等等)都区分大小写.如"var a;"中的变量a跟"var A;&quo ...
- js,jquery概念理解
js,jquery都是一种脚本语言,编写代码,实现页面的dom操作,特效等功能. 区别: 1.jquery"写的更少,做的更多"; 2.使用jquery需要导入jquery文件. ...
随机推荐
- spring-boot-learning自动配置原理
启动器: spring-boot-starter:spring-boot场景启动器,帮我们倒入我们场景需要的组件依赖 不同的场景有不同的启动器: spring-boot-starter-web ...
- 什么是 UML?
UML 是统一建模语言(Unified Modeling Language)的缩写,它发表于 1997 年,综合了当时已经存在的面向对象的建模语言.方法和过程,是一个支持模型 化和软件系统开发的图形化 ...
- 处理器映射器(HandlerMapping)及处理器适配器(HandlerAdapter)详解(二)
注解的 处理器映射器 和 处理器适配器 介绍 注解的映射器: 在 Spring3.1 之前使用 DefaultAnnotationHandlerMapping 注解映射器(根据 DispatcherS ...
- leetcode_两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同 ...
- python学习笔记(十)——进程间通信
python 在进程间通信时有很多方式,比如使用Queue的消息队列,使用 pip的管道通信,share memory 共享内存或 semaphore 信号量等通信方式. 这里我们演示一下通过消息队列 ...
- 51单片机头文件reg51.h详解
转自:http://www.51hei.com/mcu/2670.html 我们在用c语言编程时往往第一行就是头文件,51单片机为reg51.h或reg52.h,51单片机相对来说比较简单,头文件里面 ...
- 洋桃电子之STM32
1.ARM内核与分类 作者:知乎用户链接:https://www.zhihu.com/question/52915983/answer/258507276来源:知乎著作权归作者所有.商业转载请联系作者 ...
- java中Error和Exception用法上有什么区别,Error是怎么回事?
顺便提一句, 和Exception 相对应的,还有Error,Error(错误)表示系统级的错误和程序不必处理的异常,是JRE(java运行环境)的内部错误或者硬件问题,比如,另外 某一处地方的bug ...
- 【vue 开发】Vue中splice的使用
splice(index,len,[item])它也可以用来替换/删除/添加数组内某一个或者几个值(该方法会改变原始数组) index:数组开始下标 len: 替换/删除的长度 item:替换的值,删 ...
- java中接口interface可以持有多个类的共享常量
3.接口持有多个类的共享常量 接口另一主要功能,马克-to-win: 可以使用接口来引入多个类的共享常量.所有的这些变量名都将作为常量看待.所有定义在接口中的常量都默认为public.static和 ...