摘要: javascript执行环境(执行期上下文)当js控制器(control)进入可执行代码时,控制器会进入一个执行环境,活动的多个执行环境构成执行环境栈,最上面的是正在运行的执行环境,当控制器进入一个新的执行环境时,新的执行环境被放到栈最顶端。执行环境包含以下三个组件:组件 作用目的词法环境 执行环境内的代码创建的标识符引用的一个词法环境对象变量环境 执行环境内的代码通过变量表达式和函数表达式创建的绑定的一个词法环境对象。this绑定 指定该执行环境内的this关键字所关联的值。执行环境的建立当执行全局代码,使用eval函数,执行一个函数时,会创建执行环境。创建执行环境分... 阅读全文
posted @ 2014-03-25 12:08 mufc-go 阅读(2048) 评论(2) 推荐(0) 编辑
摘要: 先来看一个例子:function get(){ return { a:1 }}var r=get();console.log(r);似乎r的值应该是{a:1},然而运行结果却是undefined,这就得从ecmascript的分号自动插入规则说起。js的自动插入分号有三个规则:1,从左向右解析程序,当遇到不符合词法文法产生式的token,只要满足下面条件之一就在违规token前自动插入分号:a,至少有一个行结束符分隔了违规token和前一个token.b,违规token是}function a(){alert("function");}a()这个会弹出警告框,... 阅读全文
posted @ 2014-03-14 15:49 mufc-go 阅读(761) 评论(0) 推荐(0) 编辑
摘要: 构造器:可以被 new 运算符调用, Boolean,Number,String,Date,RegExp,Error,Function,Array,Object 都是构造器,他们有各自的实现方式。比如:var s=new String("test")s的 [[Prototype]] 内部属性设定为标准内置的字符串原型对象,它是 String.prototype 的初始值。s的 [[Class]] 内部属性设定为 "String"。s的 [[Extensible]] 内部属性设定为 true。s的 [[PrimitiveValue]] 内部属性设定为 To 阅读全文
posted @ 2014-02-11 17:54 mufc-go 阅读(1363) 评论(0) 推荐(1) 编辑
摘要: 最近做一个广告项目,里面涉及很多动画效果,由于不能使用jquery,所以只能构建自己的动画方法。数据结构:elem是DOM对象,给它设置一个属性对象,用来记录elem的动画对象,比如'left','opacity'等。该对象的属性又有自己的动画队列,队列的每一项是一个对象,该对象有两个属性start,end,分别用来存储开始的值和动画结束的值,该对象有三个方法,begin,finish是开始结束动画,callbak用来保存该动画结束时需要执行的函数,见下图:animation方法:分词器,用来解析value表达式,比如:"+=300px"fu 阅读全文
posted @ 2013-12-06 15:06 mufc-go 阅读(1162) 评论(1) 推荐(0) 编辑
摘要: 推荐一款JS正则表达式工具:rline 正则表达式图形化工具 一期 demo:http://zhoushengfe.com/rline.html 在输入框填入正则表达式,支持格式:1,没有斜线,如:\d|\s ; 2,有斜线,如:/\d|\s/ 点击展示按钮,将会在下方生成正则流程图;同时在控制台中 阅读全文
posted @ 2013-10-12 14:02 mufc-go 阅读(1351) 评论(0) 推荐(0) 编辑
摘要: 分析sizzle源码并不是为了去钻牛角尖,而是去了解它的思想,学习下期中一些技术的运用。1,sizzle中的正则表达式jquery源码中充斥着各种正则表达式,能否看懂其源码的关键之一就是对正则表达式的理解。RegExp对象的exec方法:返回一个数组,第一个是匹配项,后边依次是分组匹配项,如果分组匹配不成功,则为undefined。而且还返回属性index(匹配项起始index),input(要验证的字符串)比如:var r=/^(\d{1})\s((\w?)|(\d{1}))$/.exec("2 ")r=["2 ", "2", &q 阅读全文
posted @ 2013-09-16 16:29 mufc-go 阅读(1410) 评论(0) 推荐(1) 编辑
摘要: 如果快速匹配不成功,则会进入sizzle自己的解析顺序,主要流程如下:总结流程如下:(1)函数sizzle是sizzle的入口,如果能querySelectAll快速匹配,则返回结果(2)函数Select是sizzle自己的选择流程入口(3)对于不包含伪类选择器的,从右向左匹配,先选择右边的分词的结果,再验证关系是否成立(4)对于包含伪类选择器的,则直接进入匹配函数生成流程,最后通过setMatcher这个终极匹配器递归sizzle获得结果(5)借助condense函数筛选结果从技术上来说的总结:(1)NB的正则表达式,各种选择器,分组匹配,反向引用,RegExp的exec的运用。(2)函数闭 阅读全文
posted @ 2013-09-13 18:29 mufc-go 阅读(660) 评论(0) 推荐(0) 编辑
摘要: 不是所有的选择器都需要去分词,生成相应的匹配函数,这样流程比较复杂,当浏览器具备原生的方法去匹配元素是,没有理由不优先匹配,下面看看进入Sizzle后,它是怎么优先匹配这些元素的:function Sizzle( selector, context, results, seed ) { /* 执行$("ul.list>li span:eq(1)")时,递归第二次时, selector "ul.list>li span" */ var match, elem, m, nodeType, // QSA vars i, groups, ... 阅读全文
posted @ 2013-09-04 16:17 mufc-go 阅读(508) 评论(0) 推荐(1) 编辑
摘要: sizzle是jquery的核心,它用来选择匹配的元素,其代码包含在一个匿名函数中,并以window作为其上下文环境:(function( window, undefined ) {//此处为sizzle代码})( window );匿名函数体内,首先申明了很多变量,比如下边这些正则表达式:classCache = createCache(), /*classCache: function cache( key, value ) { // Use (key + " ") to avoid collision with native prototype properti... 阅读全文
posted @ 2013-09-03 18:25 mufc-go 阅读(892) 评论(0) 推荐(0) 编辑