博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《高性能javascript》读书笔记:第二章 数据访问
阅读量:5961 次
发布时间:2019-06-19

本文共 1694 字,大约阅读时间需要 5 分钟。

javascript中四种基本的数据存取位置:

1,直接量:只代表自己,不存储在特定位置,包括字符串、数字、布尔值、对象、数组、函数、正则表达式、null值、undefined值

2, 变量:var定义的数据存储单元

3,数组元素:存储在数组内部,以数字作为索引

4,对象成员:存储在对象内部,以字符串作为索引

直接量和局部变量的访问速度快于数组项和对象成员的访问速度。

一个函数被创建的作用域中对象的集合叫作函数的作用域链(键值对)

其中包括一个单独的可变对象(window,navigator,document等等)。

执行函数时,由运行期上下文(函数执行的环境)按对象在函数中出现的顺序生成活动对象(包括所有局部变量、命名参数、参数集合、this),然后将活动对象推入作用域链的前端。

函数访问数据时都需要去搜索运行期上下文的作用域链,查找同名的标识符,搜索过程从作域链头部开始,也就是当前运行函数的活动对象,直到找到为止。如果到最后还没找到,则认为该标识符是未定义的。并且,假如有多个同名的标识符的话,只会查找第一个函数中读写局部变量是最快的,而读写全局变量是最慢的。

如果某个跨作用域的值在函数中被引用一次以上,那么建议把它存储到局部变量里。 

With(document等):把document等括号内的对象置 于作用域的头部,会使其它局部变量标识符的识别。

catch:                   把异常对象置于作用域的头部,同样会影响局部变量标识符的识别。

eval(code)   执行代码。代码格式为字符串。

 

闭包:

闭包的[[Scope]]属性包含了与运行期上下文作用域相同的对象和引用,因为会有一项副作用,激活对象无法被销毁。占内存,可能会导致内存泄露。

对象成员包括属性和方法。

原型,我感觉相当它的父类。在Firefox、Safari、Chrome中这个属性_proto_即表示它的原型。

var book ={
  title:"标题",   publisher:"雅虎" }; alert(book.hasOwnProperty("title"));//true 表示title是实例成员 alert(book.hasOwnProperty("toString"));//false 表示该实例中没有toString alert("title" in book);//true alert("toString" in book);//true 都返回true,表示用in操作符时会搜索实例也搜索实例的原型。

 

 

对象的原型决定了实例的类型。所有对象都是对象Object的实例。

function Book(title,publisher){
  this.title=title;   this.publisher=publisher; } Book.prototype.sayTitle=function(){
  alert(this.title); }; var book1=new Book("标题","雅虎"); var book2=new Book("测试","哈哈"); alert(book1 instanceof Book);//true alert(book1 instanceof Object);//true

上面的示例中,book1的原型(_proto_)是Book.prototype,Book.prototype的原型是Object.

原型链越深,搜索实例成员越慢。

嵌套成员: 每次遇到点操作时,导致js引擎搜索所有对象成员。所以location.href比window.location.href要快。 object.name和object["name"]功能差不多(Safari中点符号会快些)。

不要在同一个函数里多次查找同一个对象成员,除非它的值改变了。应该用查找一次保存为局部变量。

 

转载于:https://www.cnblogs.com/liuchunmang/archive/2012/01/09/2317492.html

你可能感兴趣的文章
比对2个文件夹,删除已存在,或者 删除指定目录下,按文字开头(结束)文件
查看>>
uva 712 - S-Trees
查看>>
git 保存账号密码
查看>>
angularjs + fis +modJS 对于支持amd规范的组建处理(PhotoSwipe 支持,百度webUpload支持)...
查看>>
Spring Retry
查看>>
struts2源码分析-IOC容器的实现机制(上篇)
查看>>
meta之viewport
查看>>
手写SpringIoc底层实现代码,基于反射机制
查看>>
JPA学习笔记1——JPA基础
查看>>
Mac下Qt Creator无法输入中文的解决方法
查看>>
分享Android编程中Facebook图片加载库Fresco的使用
查看>>
【转载】知乎技术方案初探
查看>>
【转载】MySQL复制的概述、安装、故障、技巧、工具
查看>>
JXL导出Excel数据表
查看>>
数据库字段加1
查看>>
GNOME是最好的!
查看>>
Nginx 的软件负载均衡详解
查看>>
如何解决mysql主从延迟
查看>>
iOS App 之间的相互跳转
查看>>
Adaboost
查看>>