`

javascript的数据访问

阅读更多

 在javascript中有四种基本的数据访问位置:

1.直接量:

直接量仅仅代表自己,而不存储于特定位置。 JavaScript 的直接量包括:字符串,数字,布尔值,对象,

数组,函数,正则表达式,具有特殊意义的空值,以及未定义。

2.变量:

开发人员使用var 关键字创建用于存储数据值。

3.数组项

具有数字索引,存储一个JavaScript 数组对象。

4.对象成员

具有字符串索引,存储一个JavaScript 对象。

 

在大多情况下,对一个直接量和一个局部变量数据访问的性能差异是微不足道的。访问数组项和对象成员的代价要高一点,具体高多少,很大程序上依赖于浏览器。

 

几个重要概念:作用域链,标识符(此处不作详解,具体翻阅相关书籍)

 

标识符识别性能:

标识符识别不是免费的,事实上没有哪种电脑操作可以不产生性能开销。在运行期上下文的作用域链中,一个标识符所处的位置越深,它的读写速度就越慢。所以,函数中局部变量的访问速度总是最快的,而全局变量通常是最慢的(优化的JavaScript 引擎在某些情况下可以改变这种状况)。请记住,全局变量总是处于运行期上下文作用域链的最后一个位置,所以总是最远才能触及的。对所有浏览器来说,一个标识符所处的位置越深,读写它的速度就越慢

例子:

function initUI(){
var bd = document.body,
links = document.getElementsByTagName_r("a"),
i = 0,
len = links.length;
while(i < len){
update(links[i++]);
}
document.getElementById("go-btn").onclick = function(){
start();
};
bd.className = "active";
}

 此函数包含三个对document的引用,document是一个全局对象,搜索此变量,必须要遍历整个作用域链,直到最后在全局变量对象中找到它。你可以通过将全局变量的引用存储在一个局部变量中,然后局部变量

代替全局变量。

function initUI(){
var doc = document,
bd = doc.body,
links = doc.getElementsByTagName_r("a"),
i = 0,
len = links.length;
while(i < len){
update(links[i++]);
}
doc.getElementById("go-btn").onclick = function(){
start();
};
bd.className = "active";
}

 

改变作用域链:

1.使用with表达式(不建议使用)

function initUI(){
with (document){ //avoid!
var bd = body,
links = getElementsByTagName_r("a"),
i = 0,
len = links.length;
while(i < len){
update(links[i++]);
}
getElementById("go-btn").onclick = function(){
start();
};
bd.className = "active";
}
}

 

 通过将document 对象传递给with 表达式,一个新的可变对象容纳了document 对象的所有属性,被插入

到作用域链的前端。这使得访问document 的属性非常快,但是访问局部变量的速度却变慢了,例如bd 变

量。正因为这个原因,最好不要使用with 表达式。正如前面提到的,只要简单地将document 存储在一个

局部变量中,就可以获得性能上的提升。

 

2.try-catch表达式的catch子句:

当try 块发生错误时,程序流程自动转入catch 块,并将异常对象推入作用域链前端的一个

可变对象中。在catch 块中,函数的所有局部变量现在被放在第二个作用域链对象中。

try {
methodThatMightCauseAnError();
} catch (ex){
handleError(ex); //delegate to handler method
}

 请注意,只要catch 子句执行完毕,作用域链就会返回到原来的状态。

handleError()函数是catch 子句中运行的唯一代码。此函数以适当方法自由地处理错误,并接收由错误产

生的异常对象。由于只有一条语句,没有局部变量访问,作用域链临时改变就不会影响代码的性能。

 

动态作用域:(不建议使用)

无论是with 表达式还是try-catch 表达式的catch 子句,以及包含()的函数,都被认为是动态作用域。一

个动态作用域只因代码运行而存在,因此无法通过静态分析(察看代码结构)来确定(是否存在动态作用

域)

 

嵌套对象成员会造成重大性能影响,尽量少用。

 

一个属性或方法在原形链中的位置越深,访问它的速度就越慢。

 

 

一般来说,你可以通过这种方法提高JavaScript 代码的性能:将经常使用的对象成员,数组项,和域外变量存入局部变量中。然后,访问局部变量的速度会快于那些原始变量。

 

 

  • 大小: 36.5 KB
分享到:
评论

相关推荐

    JS直接访问数据Mysql

    JavaScript 直接访问 MySQL 数据库 在 JavaScript 中直接访问 MySQL 数据库是通过 JavaScript DataBase Connector(JSDBC)实现的。JSDBC 提供了一个连接 MySQL 数据库的组件,使得开发者可以在 JavaScript 中直接...

    《使用javascript访问kettle内部组件》示例代码

    标题"《使用javascript访问kettle内部组件》示例代码"表明,我们将探讨如何使用JavaScript与Kettle进行交互,以控制和操作Kettle的数据转换和作业。这通常涉及到通过Web服务、API或者自定义插件的方式,实现...

    MFC的WebBrowser控件 C++与JavaScript之间数据交互传递

    WebBrowser控件允许在MFC应用中嵌入网页浏览功能,而C++与JavaScript之间的数据交互则为这种集成提供了更丰富的可能性。本文将深入探讨如何实现C++和JavaScript之间的数据交换,并通过提供的源代码实例进行详细讲解...

    Javascript 数据结构算法.zip

    在这个压缩包的“ljg_resource1”子文件中,可能包含了相关的代码实例、讲解文档或者是练习题目,可以帮助学习者深入理解和应用JavaScript数据结构与算法。通过阅读和实践这些资源,你可以逐步掌握这个领域的核心...

    数据结构与算法-JavaScript描述

    数据结构与算法是计算机科学的基础,对于任何编程语言来说,理解和掌握它们都是至关重要的,JavaScript也不例外。本资源“数据结构与算法-JavaScript描述”显然是一本专注于将这些概念应用于JavaScript编程的电子书...

    JavaScript实现数据结构

    1. 数组(Array):JavaScript中的数组是最常用的数据结构之一,它可以存储多个元素,并通过索引来访问。数组可以用来实现简单的线性存储,如栈(LIFO,后进先出)或队列(FIFO,先进先出)。 2. 对象(Object):...

    学习JavaScript数据结构与算法.docx

    学习JavaScript数据结构与算法 学习 JavaScript 数据结构与算法是编程语言的重要组成部分,本章概述了 JavaScript 的基本概念、数据结构和算法的重要性,以及 JavaScript 中常见的数据结构和算法。 1. JavaScript ...

    JavaScript基本数据结构

    JavaScript的基本数据类型主要包括四种:数值(包括整数和浮点数)、字符串、布尔值和空值。 1. 数值:可以是整数或浮点数,比如123、3.14。此外,还可以使用科学记数法表示,如5E7(5乘以10的7次方)。 2. 字符串...

    JavaScript 内存数据做范围分段专题图

    通过这个库,开发者可以访问和操作SuperMap服务器上的地图服务、数据服务以及各种GIS功能,包括空间查询、分析和可视化等。 2. **内存数据**: 在这个范例中,"内存数据"指的是在JavaScript运行时直接存储在应用...

    head first JavaScript源码

    原型链是JavaScript实现继承的关键机制,它允许一个对象访问另一个对象的属性和方法。 事件处理和DOM操作也是JavaScript在网页交互中的关键部分。通过监听和触发事件,JavaScript可以响应用户的操作,如点击按钮、...

    解析姐的上个月和这个月数据的javascript脚本

    **JavaScript脚本解析数据...具体实现会依赖于数据的来源、格式以及分析的需求,例如比较销售额、用户访问量等指标。通过阅读博主分享的代码和文章,我们可以更深入地了解如何利用JavaScript来解析和分析时间序列数据。

    JAVAScript数据类知识检测.doc

    在JavaScript中,数据类型分为两种:基本数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。基本数据类型包括Undefined、Null、Boolean、Number、String和ES6新增的Symbol。这些类型在内存...

    JavaScript数据结构之链表的实现

    链表是一种重要的数据结构,它不同于数组,不依赖于固定位置的索引来访问元素,而是通过节点间的引用关系来组织数据。在JavaScript中,链表的实现通常涉及到节点类(Node)和链表类(LinkedList)的设计。 节点类...

    JavaScript讲解数据结构和算法.zip

    数据结构是组织和存储数据的方式,以便于高效地访问和修改。常见的数据结构有数组、链表、栈、队列、树、图等。在JavaScript中,这些数据结构可以通过内置对象如Array、Map或自定义对象来实现。例如: 1. **数组**...

    从 0 到 1 学习 JavaScript 数据结构与算法.zip

    在学习JavaScript数据结构与算法时,以下几点是需要特别关注的: 1. 函数式编程:JavaScript 支持函数式编程风格,可以利用高阶函数、闭包等特性来简化代码,处理复杂的数据结构。 2. 异步操作:JavaScript 作为...

    JavaScript语言精粹完整版

    JavaScript中的函数具有闭包的特性,这意味着函数可以访问并操作其外部作用域中的变量。 #### 对象 JavaScript中的对象是一种特殊的数据结构,它可以存储键值对形式的数据。对象可以包含属性和方法,这使得它成为...

    基于javascript实现的一些数据结构

    在JavaScript编程中,数据结构是基础且至关重要的概念,它涉及到如何有效地存储和组织数据,以便于我们在程序中高效地访问和操作。本资源“基于javascript实现的一些数据结构”很可能包含了一系列JavaScript实现的...

Global site tag (gtag.js) - Google Analytics