高性能JavaScript
Posted MJ_MY
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高性能JavaScript相关的知识,希望对你有一定的参考价值。
第二章 (数据存取)
一.四种基本的数据存取位置
(1)字面量
字面量只代表自身,不存储在特定的位置。javascript中的字面量有:String,Number,Boolean,Object,Array,Function,Regex,null,nudefined值。
(2)本地变量
使用关键字定义变量。例:var定义的数据存储单元。
(3)数组元素
存储在javaScript数组对象内部,以数字作为索引。
(4)对象成员
存储在javaScript对象内部,以字符串作为索引。
二.管理作用域
1.作用域链
function add(){ //创建add函数过程中,它就产生了内部作用域,然后它的作用域链中也插入了一个对象变量,这个全局对象代表着所有在全局范围内定义的变量,该全局对象包含了window,docunment,等。 }
然后在执行add这个函数时,会产生一个称为执行上下文(执行环境)的内部对象。
每次执行add函数都会创建一个独一无二的执行环境,所以多次调用一个函数就会导致创建多个执行环境,当函数执行完毕,执行环境也随之销毁。
每个执行环境都有自己的作用域链,用于解析标识符。
2.标识符解析的性能
(1)解析标识符是有代价的,一个标识符所在的位置越深那么解析的速度则越慢。因此函数中局部变量的读写总是最快的,而读写全局变量通常是最慢的。
function add (){ var a = document.body; var b = document.getElementId(‘id‘); var c = document.getElementId(‘abc‘); } //该函数引用了三次document,而document是全局对象,搜索该对象的过程必须要遍历整个作用域链,直到最后在全局变量对象中找到。
(2)优化:
function add (){ var doc = doucment; var a = doc .body; var b = doc .getElementId(‘id‘); var c = doc .getElementId(‘abc‘); } //先将一个全局变量的引用储存在一个局部变量中, 然后使用整个局部变量替代全局变量doucment。所以执行时只执行一次搜索全局变量的过程。
以上是关于高性能JavaScript的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段12——JavaScript的Promise对象