JS 闭包应用
1. 代替全局变量
//闭包应用1:代替全局变量的使用
//多个函数都用到一个变量,通常我们会定义一个全局变量,然后在各函数中应用它,
//为了避免使用全局变量,可以通过使用立即执行函数定义临时变量,子函数即是闭包函数
// *********************************实际上任何函数都是全局作用域的内部函数,都能访问全局变量,所以都是window的闭包************************************************
(function(){
var result='hello';
function fun1(){
alert(result);
}
fun1(); //hello 形成闭包
)();
alert(result); //在立即执行函数外部,这里就访问不到test2
// JQuery的闭包结构:用一个函数域包起来,就是所谓的沙箱
// 在这里边 var 定义的变量,属于这个函数域内的局部变量,避免污染全局
// 把当前沙箱需要的外部变量通过函数参数引入进来
// 只要保证参数对内提供的接口的一致性,你还可以随意替换传进来的这个参数
(function(window, undefined) {
// jQuery 代码
})(window);
2. 把方法当参数的情况,使用闭包
// 1)延时函数
function fun1(arg){
return function(){console.dir(arg);}
}
var test=fun1('hello');//返回f3的内部函数的引用
setTimeout(test,100); //这里直接传递fun1是不正确的 // 2)方法注册 document.getElementById("hello").onclick=test;//正确, document.getElementById("hello").attachEvent("onclick",test);//正确,
3. 惰性模式: 减少代码每次执行时的重复性判断,通过重新定义对象来避免原对象中的分支判断,提高网站性能。
// 每次调用方法时,都会进行条件的判断。
var AddEvent = function(dom, type, fn){
if(dom.addEventListener){
dom.addEventListener(type, fn, false);
}else if(dom.attachEvent){
dom.attachEvent('on'+type, fn);
}else{
dom['on'+type] = fn;
}
通过惰性模式:加载即执行:JavaScript文件加载时通过闭包执行对方法进行重新定义,在页面加载时会消耗一定的资源
var AddEvent = function(dom, type, fn){
if(dom.addEventListener){
return function(dom, type, fn){
dom.addEventListener(type, fn, false);
}
}else if(dom.attachEvent){
return function(dom, type, fn){
dom.attachEvent('on'+type, fn);
}
}else{
return function(dom, type, fn){
dom['on'+type] = fn;
}
}
}();
JS 闭包应用的更多相关文章
- js闭包的作用域以及闭包案列的介绍:
转载▼ 标签: it js闭包的作用域以及闭包案列的介绍: 首先我们根据前面的介绍来分析js闭包有什么作用,他会给我们编程带来什么好处? 闭包是为了更方便我们在处理js函数的时候会遇到以下的几 ...
- 大部分人都会做错的经典JS闭包面试题
由工作中演变而来的面试题 这是一个我工作当中的遇到的一个问题,似乎很有趣,就当做了一道题去面试,发现几乎没人能全部答对并说出原因,遂拿出来聊一聊吧. 先看题目代码: function fun(n,o) ...
- Js闭包常见三种用法
Js闭包特性源于内部函数可以将外部函数的活动对象保存在自己的作用域链上,所以使内部函数的可以将外部函数的活动对象占为己有,可以在外部函数销毁时依然存有外部函数内的活动对象内容,这样做的好处是可 ...
- js闭包之初步理解( JavaScript closure)
闭包一直是js中一个比较难于理解的东西,而平时用途又非常多,因此不得不对闭包进行必要的理解,现在来说说我对js闭包的理解. 要理解闭包,肯定是要先了解js的一个重要特性, 回想一下,那就是函数作用域, ...
- (原创)JS闭包看代码理解
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...
- js闭包理解
js闭包的作用是使函数外可以访问函数内部的变量,是通过 在函数内部 定义 访问函数内变量 的函数实现的,内部的一个函数产生一个闭包 function a() { var i=0; return fun ...
- js闭包理解实例小结
Js闭包 闭包前要了解的知识 1. 函数作用域 (1).Js语言特殊之处在于函数内部可以直接读取全局变量 <script type="text/javascript"> ...
- Js闭包的用途
本来想总结一点JavaScript中的闭包的一些用法,在查资料的时候发现了一篇很好的文章,就转过来收藏了,下面附上传送门: js闭包的用途 ---------sunlylorn 我们来看看闭包的用途. ...
- js闭包和ie内存泄露原理
也议 js闭包和ie内存泄露原理 可以, 但小心使用. 闭包也许是 JS 中最有用的特性了. 有一份比较好的介绍闭包原理的文档. 有一点需要牢记, 闭包保留了一个指向它封闭作用域的指针, 所以, 在给 ...
- js闭包(closure),个人理解
一.闭包概念理解 各种专业文献上对js"闭包"(closure)定义非常抽象,贼难看懂.我的理解是,闭包就是能够读取某函数内部变量的函数.由于在Javascript语言中只有在函数 ...
随机推荐
- c#的小技巧
很多.net的使用小技巧,总是要自己记下来的,给自己. 一:时间格式话中H和h的区别 DateTime.ToString("yyyy-MM-dd HH:mm:ss");//转化成2 ...
- iOS nsstring 截取字符前后字符串
// Str = @"PEK_LHR" NSRange range = [trafficeStr rangeOfString:@"_" options:NSBa ...
- 160728、Spark Streaming kafka 实现数据零丢失的几种方式
定义 问题开始之前先解释下流处理中的一些概念: At most once - 每条数据最多被处理一次(0次或1次) At least once - 每条数据最少被处理一次 (1次或更多) Exactl ...
- 【IDEA】Maven踩坑:pom文件中的默认profiles不生效+IDEA中Maven的profiles使用说明
一.问题即分析 项目pom文件中的profiles有3个配置:dev.test和production 默认配置的是dev,如下图: 但在本地起服务时,读取的配置始终是test里的. 二.原因 2.1 ...
- CodeForces 670C Cinema(排序,离散化)
C. Cinema time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...
- 理解Python的双下划线命名
引子 我热情地邀请大家猜测下面这段程序的输出: class A(object): def __init__(self): self.__private() ...
- C#生成Windows服务
1. 新建一个项目,或者从选择当前解决方案--右键-添加--新建项目 2. 选择Visual C#项目-->Windows 服务,填写要创建的服务名称(修改默认的WindowService1成为 ...
- Java栈(Stack)和堆(Heap)
In the following code public void Method1() { int i = 4; int y = 2; class1 cls1 = new class1(); } He ...
- 2015-04-14——css3 @media
//判断横竖屏 @media screen and (min-aspect-ratio: 13/13) { body {background-color:red;}} //屏幕宽高比,必须是除数形式 ...
- LinkedList 的get方法分析---java
Java LinkedList.get() 获取元素 Get(int)方法的实现在remove(int)中已经涉及过了.首先判断位置信息是否合法(大于等于0,小于当前LinkedList实例的Si ...