JavaScript 记忆 Memoization
摘要:函数可以用对象去记住先前操作的结果,从而能避免无谓的运算,这种优化被称为记忆(Memoization)。JavaScript 的对象和数组要实现这种优化是非常方便的Memoization 是一种将函数返回值缓存起来的方法,在 Lisp, Ruby, Perl, Python 等语言中使用非常广泛。随着 Ajax 的兴起,客户端对服务器的请求越来越密集(经典如 autocomplete),如果有一个良好的缓存机制,那么客户端 JavaScript 程序的效率的提升是显而易见的。Memoization 原理非常简单,就是把函数的每次执行结果都放入一个散列表中,在接下来的执行中,在散列表中查找是否已
阅读全文
posted @
2012-06-30 04:38
【艾伦】
阅读(500)
推荐(2) 编辑
Webkit是如何加载网页的
摘要:原文:How WebKit Loads a Web Page在WebKit渲染网页之前,它需要将页面和所有引用的资源加载完毕。其中会涉及到不同层面的工作。在本文中,我将重点关注WebCore(WebKit中主要渲染组件)是如何在加载过程中发挥作用的。WebKit包含两条加载流水线,其中一条负责将文档加载到frames当中,另一条负责加载其他资源(比如图片、脚本一类)。下图描述了两条流水线中涉及的主要对象。加载FramesFrameLoader负责将文档加载到frames当中,当点击链接时,FrameLoader会创建一个新的DocumentLoader对象,并置于“policy”状态,接着就等
阅读全文
posted @
2012-06-29 18:10
【艾伦】
阅读(1182)
推荐(1) 编辑
变量,作用域,和内存问题
摘要:js 变量是松散类型的本质,决定了它只是在特定时间内用于保存特定值的一个名称而已。基本类型 栈内存中的简单数据段 5种 underfined Null Boolean NumberString.固定大小 提高速度
阅读全文
posted @
2011-10-30 15:19
【艾伦】
阅读(392)
推荐(0) 编辑
创建可重用的对象
摘要:如图。。常见的的模拟http://www.hellokaidi.com
阅读全文
posted @
2011-10-30 14:00
【艾伦】
阅读(458)
推荐(0) 编辑
详细js 正则的解释
摘要:g 代表全局匹配m 代表可以进行多行匹配i 代表不区分大小写匹配^ 匹配输入字符串的开始位置$ 匹配输入字符串的结束位置* 匹配前面的子表达式零次或多次. 等价于{0,}+ 匹配前面的子表达式一次或多次. 等价于{1,}? 匹配前面的子表达式零次或一次. 等价于[0,1} , 当该字符跟在任何一个其他限制符(*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",
阅读全文
posted @
2011-10-29 09:51
【艾伦】
阅读(2213)
推荐(3) 编辑
Javascript 的函数式对象(三)利用闭包模拟类的静态变量和方法
摘要:除了模拟类的私有变量和私有方法。闭包还可用来模拟类的静态变量和方法。除了再次利用js的闭包特性,还需要借助js语法上的一些特点。执行上述代码后,浏览器控制台将会输出如下字符串:Created 1 tree items!Created 2 tree items!之所以把上述一些js变量和函数称为“静态”,是借用了Java的提法。这些“静态”变量和方法被保存在闭包中,在内存中是唯一的,不会随着该函数副本的增加而增加。如果一个函数需要被实例化多次,但其中的一些内部函数并不需要访问任何实例数据,从节省内存的角度考虑,可采用上述构建静态函数的方法。js中的“静态”概念,有一点与Java不同:如果上述Tr
阅读全文
posted @
2011-10-29 09:44
【艾伦】
阅读(1411)
推荐(0) 编辑
JS高级程序设计之匿名函数
摘要://高级程序匿名函数章function a(arg){};var a = function(){};var a = new Function("arg","return n1+n2");/* 函数就是对象 JS中三种声明函数的方式 区别:js中 函数名只是一个函数对象的指针,通俗点讲就是 一个书的目录 知道具体的内容的位置根据js预解析 声明函数会提前加到作用域中,然匿名函数姑且看过变量根据变量的方式所以声明函数能在全局任何地方调用,匿名函数需要先定义*/待续
阅读全文
posted @
2011-10-28 22:38
【艾伦】
阅读(445)
推荐(0) 编辑
jQuery getScript跨域
摘要:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-
阅读全文
posted @
2011-10-28 22:22
【艾伦】
阅读(3735)
推荐(0) 编辑
Javascript 的函数式对象(二)从垃圾回收器的角度理解闭包
摘要:function outerFunc(){ var privateAttr = 10; return function(){ privateAttr *= 2; return privateAttr; };}// 通过调用outerFunc函数,返回一个指向innerFunc函数的引用,// 这个引用被赋给变量refInnerFuncvar refInnerFunc = outerFunc();alert(refInnerFunc());// 通过 refInnerFunc 这个引用调用到 innerFunc 函数refInnerFunc(); // return 20 变量private..
阅读全文
posted @
2011-10-28 22:16
【艾伦】
阅读(1172)
推荐(0) 编辑
Javascript 的函数式对象(一)利用闭包模拟类的私有变量和方法
摘要:在Javascript的框架开发中,面向对象式编程和面向函数式编程各有长处,因况而异。除了在单例工厂中设置一些类型常量外,闭包通常被用来模拟类的私有变量和方法。结合js的prototype机制,一个具有面向对象特点的js函数能够被以减少内存占用的形式实例化出来。每创建一个新的Tree实例,内存会为其私有变量,私有方法和所有能够访问私有变量和私有方法的方法开辟物理空间,而prototype中的方法始却始终只有一个。因此我们可以将那些不需要保存自身状态信息的方法放到js函数式对象的prototype中去,以节省浏览器的内存开销。
阅读全文
posted @
2011-10-28 22:01
【艾伦】
阅读(621)
推荐(1) 编辑
原型继承原理
摘要:prototype与[[prototype]]在有面象对象基础的前提下,来看一段代码:01//Animal构造函数02functionAnimal(name){03this.name = name;04}05//Animal原型对象06Animal.prototype = {07id:"Animal",08sleep:function(){09alert("sleep");10}11}1213vardog =newAnimal("旺才");14alert(dog.name);//旺才15alert(dog.id);//Animal16
阅读全文
posted @
2011-09-06 08:57
【艾伦】
阅读(772)
推荐(2) 编辑
匿名函数
摘要:拉姆达(lambda)函数/*ECMA-262 对象定义:无序属性的集合,散列表构造函数始终要已一个大写字母开头,非构造小写开头*/var p = new Object();p.name = "cj";p.say = function(){this.name};//缺点:使用同一个接口创建很对象,大量的垃圾重复代码//工厂模式 问题 没有解决对象识别(怎么知道一个对象的类型)function createP(name,age){ var o = new Object(); o.name =name; o.age = age; o.say =function(){this.n
阅读全文
posted @
2011-09-05 17:08
【艾伦】
阅读(356)
推荐(0) 编辑
伪数组
摘要:这篇文章来回答javascript通用循环遍历方法forEach中最后提到的关于伪数组的问题。什么是伪数组能通过Array.prototype.slice转换为真正的数组的带有length属性的对象。这种对象有很多,比较特别的是arguments对象,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。我们可以通过Array.prototype.slice.call(fakeArray)将伪数组转变为真正的Array对象。来看个示例:1varfakeArray01 = {0:'a',1:&
阅读全文
posted @
2011-09-05 15:06
【艾伦】
阅读(2913)
推荐(0) 编辑
javascript通用循环遍历方法forEach
摘要:循环遍历一个元素是开发中最常见的需求之一,那么让我们来看一个由框架BASE2和Jquery的结合版本吧.01varforEach = (function(){02//数组与伪数组的遍历03var_Array_forEach =function(array, block, context) {04if(array ==null)return;05//对String进行特殊处理06if(typeofarray =='string'){07array = array.split('');08}09vari = 0,length = array.length;10for
阅读全文
posted @
2011-09-05 15:03
【艾伦】
阅读(4146)
推荐(1) 编辑
getElementsByClassName实现
摘要:先来看一下代码:(支持多个class查询和在某个范围内进行查询)01/*02* 根据元素clsssName得到元素集合03* @param fatherId 父元素的ID,默认为document04* @tagName 子元素的标签名05* @className 用空格分开的className字符串06*/07functiongetElementsByClassName(fatherId,tagName,className){08varnode = fatherId&&document.getElementById(fatherId) || document;09tagName
阅读全文
posted @
2011-09-05 15:01
【艾伦】
阅读(595)
推荐(0) 编辑
执行环境,作用域
摘要:执行环境,作用域2010-12-10 17:03 by 名刘天下, 84 visits,收藏,编辑在javascript的学习中,执行环境、作用域是2个非常非常重要和基本的概念,理解了这2个概念对于javsacript中很多脚本的运行结果就能明白其中的道理了,比如搞清作用域和执行环境对于闭包的理解至关重要。一、执行环境(exection context,也有称之为执行上下文) 所有 JavaScript 代码都是在一个执行环境中被执行的。执行环境是一个概念,一种机制,用来完成JavaScript运行时在作用域、生存期等方面的处理,它定义了变量或函数是否有权访问其他数据,决定各自行为。 在jav
阅读全文
posted @
2011-09-05 13:46
【艾伦】
阅读(3782)
推荐(8) 编辑
谈谈Javascript的this指针
摘要:JavaScript中的this总是让人迷惑,应该是js众所周知的坑之一。个人也觉得js中的this不是一个好的设计,由于this晚绑定的特性,它可以是全局对象,当前对象,或者…有人甚至因为坑大而不用this。JavaScript中的this总是让人迷惑,应该是js众所周知的坑之一。个人也觉得js中的this不是一个好的设计,由于this晚绑定的特性,它可以是全局对象,当前对象,或者…有人甚至因为坑大而不用this。其实如果完全掌握了this的工作原理,自然就不会走进这些坑。来看下以下这些情况中的this分别会指向什么:1.全局代码中的thisalert(this)//window 全局范围内
阅读全文
posted @
2011-09-02 17:26
【艾伦】
阅读(3272)
推荐(10) 编辑