摘要: 作用域定义了在当前上下文中能够被访问到的成员,在Javascript中分为全局作用域和函数作用域,通过函数嵌套可以实现嵌套作用域。 闭包一般发生在嵌套作用域中。闭包是JavaScript最强大的特性之一,很多高级应用都要依靠闭包实现。如OO的私有成员和模块化等。然而闭包虽然强大,但一般比较占用内存另外如果使用不当还会引起内存泄露,对闭包有了解的jser一般都知道闭包的这些个问题,本文先阐述了闭包和作用域链的关系,然后分析了产生这些个问题的原因。下面是一段闭包的示例代码:var name = "windows's name";var object = { name : 阅读全文
posted @ 2011-05-11 20:02 rentj 阅读(1733) 评论(1) 推荐(1) 编辑
摘要: var ie = !-[1,]; 这句代码在IE9之前曾被称为世界上最短的IE判定代码。代码虽短但确包含了不少javascript基础知识在里面。在这个例子中代码执行时会先调用数组的toString()方法,执行[1,].toString()在IE6,7,8中将会得到“1,”。然后表达式就变为!-“1,”。再尝试把“1,”转换成数值类型得到NaN ,再对NaN取负得到值仍为NaN。最后执行!NaN返回true。下面通过分解这个语句来回顾下代码中所涉及到的javascript知识:浏览器的数组字面量解析差异 [1,]表示使用javascript的数组字面量定义了一个数组。 在IE6,7,8中数组 阅读全文
posted @ 2011-05-06 09:09 rentj 阅读(2501) 评论(13) 推荐(5) 编辑
摘要: 面向对象的好处就是可以让你的代码语义性更强,因为使用它可以直观的表达“谁.做什么()”的语义,使得我们的程序代码更接近自然语言。然而现实的情况就是我们经常会看到使用面向对象的编程语言写出来的却是面向过程的代码。其实这也不难理解因为大多人开始学习编程语言都是从面向过程的语言学起的如BASIC,C等这些经典的编程入门语言。但在实际开发中一方面是这些面向过程的知识和经验对我们产生了一种先入为主的主导作用,另一方面我们又希望能够得到面对象编程的优势。最终使得我们实际产出的是即没有向过程也没有面向对象的代码,虽然感觉设计有问题但又不知道问题出在那。后来我们知道了OO设计原则、OO设计模式便如获至宝般开. 阅读全文
posted @ 2011-04-30 15:14 rentj 阅读(3231) 评论(32) 推荐(8) 编辑
摘要: 先看一道JavaScript题目,据说是国内某知名互联网企业的JavaScript笔试题,如果对正则的全局匹配模式不了解的话可能会对下面的输出结果感到疑惑。View Code var str = "123#abc";var re = /abc/ig;console.log(re.test(str)); //输出tureconsole.log(re.test(str)); //输出falseconsole.log(re.test(str)); //输出tureconsole.log(re.test(str)); //输出false在创建正则表达式对象时如果使用了“g”标识符或 阅读全文
posted @ 2011-04-26 23:04 rentj 阅读(2795) 评论(5) 推荐(6) 编辑
摘要: 通常大多数浏览器是并行下载资源的,但由于外部脚本的特殊性例如通过脚本改变文档的DOM结构、脚本之间的存在依赖关系、使用document.write 向页面输出HTML等。浏览器为了确保正确执行脚本和呈现布局在浏览器加载和执行完成它之前会完全阻塞页面后续内容的呈现和其他资源的加载。 在页面的加载过程中如果可以做到内容的逐步呈现,对于良好的用户体验来说是非常重要的。通常我们也会在wondow对象的onload事件处理函数中做一些事情,但由于脚本阻塞加载和呈现的特性这一方面增加了页面载入时间推迟了onload事件的触发,另一方面也延迟了用户所期待的反馈。这就需要我们使用一些方法来让浏览器以非阻塞. 阅读全文
posted @ 2011-04-24 19:01 rentj 阅读(1967) 评论(0) 推荐(2) 编辑
摘要: 面试的时候如果主考官让你使用JavaScript来实现对数组元素进行插入、删除、替换操作。如果不知道Array.prototype.splice的使用的方法那很有可能就要被扣分了。使用javascript数组类型内置的splice方法仅需一行代码即可轻松实现对数组元素进行插入、删除、替换操作。方法签名:Array.prototype.splice(index,count[,elm1,elm2...n])描述:使用Array类型的splice方法可以对数组元素进行插入、替换、删除。该方法讲直接影响当前的数组对象(与.slice(index1,index2)方法不同)并返回被删除的数组项。参数:i 阅读全文
posted @ 2011-04-23 10:17 rentj 阅读(2395) 评论(5) 推荐(6) 编辑
摘要: 使用JavaScript Lint可以检查 JavaScript 语法是否规范。在工作中经常会遇到使用压缩工具压缩的代码代码不可用的情况。现在可以把Javascript Lint 集成到VS2008,在压缩之前自动检查代码。点击这里下载使用方法:1、解压压缩包到任意目录如d:\jsl-0.3.0。目录下包含如下文件: jsl.default.conf :配置JavaScript验证选项的 jsl配置文件 jsl.exe :是JavaScript Lint的主程序文件 jsl-sample.bat :示例 jsl-test.js:测试文件创建configuration 目录,拷贝jsl.defa 阅读全文
posted @ 2011-04-13 23:28 rentj 阅读(710) 评论(2) 推荐(1) 编辑
摘要: <!DOCTYPE html><html><head><meta charset=utf-8" /><title>广告代码最后加载</title></head><body><div id="open"></div><script>//ad("open",'alert("ddd")');var JSScript = { inject:function (htmlId,jsCode) 阅读全文
posted @ 2010-11-12 00:27 rentj 阅读(474) 评论(0) 推荐(0) 编辑
摘要: 在最近的编程实践中由闭包的使用引起了我对javascript代码可维护性的思考。面向对象的其中一个特性封装性通过封装可以降低类与类之间或模块与模块之间耦合性从而使我们的设计更加高内聚低耦合,在大规模的程序开发中这是度量程序可维护性的一个指标,在大量应用了基于javascript的RIA的项目中javascript代码的可维护性也变得越来越值得我们去关注。因为在javascript中没有类的概念,所以我通常会借用闭包来将数据和操作这些数据的方法封装在一起来解决设计中对象的高内聚和对象之间的松耦合的问题,然而当我试图把一个对象的构造函数定在一个闭包中时却对我产生了一些迷惑。 在下面这个演示中两个. 阅读全文
posted @ 2010-10-25 12:13 rentj 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 这个相册初看上去给人的感觉是很简陋,好像想没什么技术含量。如果您仔细看了页面的源文件后就会发现它的精妙之处了。通常我们做相册应用一般都会借助Javascript来完成其中的交互,然而这个简易相册仅使用了HTML/CSS 技术。效果可以看这里:http://www.ctrly.cn/我下面就简单给大家说说它的实现原理。在这个相册中主要使用了HTML中的“描点”, “描点”的作用大家都知道,单击描点可以定位到页面中某个指定位置。在这个简易相册中给每个大图分别定义了一个“描点”,左边缩略图链接指向与它的大图对应的描点位置。 放置大图描点的容器大小只可以容纳一个大图,并且在CSS中使用了overfol 阅读全文
posted @ 2010-08-27 14:55 rentj 阅读(3023) 评论(1) 推荐(0) 编辑