多个js中如何避免方法名重复
2015-11-10 10:16
393 查看
我想很多人面试的时候都会遇到这个问题,在最开始进入it行业的时候其实我也不懂该怎么回答,后来很多人告诉我用闭包,然后再有面试我就直接回答闭包,但其实我自己并不是太明白闭包的概念,也根本不了解它是如何来防止方法名的重复,下面我就简单讲解下我所了解的。
先谈谈闭包的概念,其实闭包就是能够读取其他函数内部局部变量的函数,由于在js函数中,只有函数内部的函数才可以读取局部变量,因此可以把闭包简单的理解为定义在一个函数内部的函数。下面用一个例子简单验证闭包的2大主要功能。1,读取函数内部变量。2,让这些变量的值始终在内存中。
例子:
function a(){
var n = 99;
function b(){
alert(n);
n++;
//或者写成 alert(n++);
}
return b;
}
通过实例我们可以很简单的发现,n是a函数内部的一个局部变量,我们在函数外部是无法读取n的,但是在内部函数b中却可以读取,这就验证了闭包的第一个功能,读取函数内部变量。下面我们通过一些打印语句来验证其第二个功能。
var c = a();
c();
c();
c();我来简单解析下这四句话:var c = a();其实就是把b的值赋值给c,这里的b是一个方法名,很多人可能觉得这里会有错误,其实是没有任何错误的,不信的可以自己去尝试下。这里的b我们用alert(b)打印出来的其实就是
function b(){alert(n);n++;//或者写成 alert(n++);},所以c的其实就这个整个b函数。执行c()其实就是执行b(),最后执行三次c()之后我们会发现每一次打印出来n的值分别是99,100,101,这里其实就验证了闭包的第二个功能。当我们在函数外部调用一个普通的js函数时,当调用结束后,js函数里面的局部变量的值就会被垃圾回收机制回收释放,但在这里却是从99变成了101,并没有回收,这是为什么呢?原因在于a是b的父函数,而b是一个全局变量,这导致b始终在内存中,而b的存在依赖于a,所以导致a也始终在内存中,从而导致n变量没有被回收释放。至此,闭包的两大常用功能解析清楚。
下面接着谈谈js文件重名文件:
避免多个js方法名重合的最简单方法就是:采用类来封装js页码。基础写法如下“
var wdh = (function($){
var _this = {};
//定义变量
_this.a = '';
_this.b = '';
//定义方法
_this.c = function(){
}
_this.d =function(){}
return _this;
})(JQuery);
因为返回了_this,所以在其他地方调用时只需要用wdh.a wdh.c()这种即可。这样完美的避免了重复的问题。
上面之所以讲述了一些闭包的概念,是因为个人确实不理解下面我采用的这种避免方法名重复的方法到底和闭包有何联系,如果看到有会的人希望在下面留言解析下,在此谢谢了。
先谈谈闭包的概念,其实闭包就是能够读取其他函数内部局部变量的函数,由于在js函数中,只有函数内部的函数才可以读取局部变量,因此可以把闭包简单的理解为定义在一个函数内部的函数。下面用一个例子简单验证闭包的2大主要功能。1,读取函数内部变量。2,让这些变量的值始终在内存中。
例子:
function a(){
var n = 99;
function b(){
alert(n);
n++;
//或者写成 alert(n++);
}
return b;
}
通过实例我们可以很简单的发现,n是a函数内部的一个局部变量,我们在函数外部是无法读取n的,但是在内部函数b中却可以读取,这就验证了闭包的第一个功能,读取函数内部变量。下面我们通过一些打印语句来验证其第二个功能。
var c = a();
c();
c();
c();我来简单解析下这四句话:var c = a();其实就是把b的值赋值给c,这里的b是一个方法名,很多人可能觉得这里会有错误,其实是没有任何错误的,不信的可以自己去尝试下。这里的b我们用alert(b)打印出来的其实就是
function b(){alert(n);n++;//或者写成 alert(n++);},所以c的其实就这个整个b函数。执行c()其实就是执行b(),最后执行三次c()之后我们会发现每一次打印出来n的值分别是99,100,101,这里其实就验证了闭包的第二个功能。当我们在函数外部调用一个普通的js函数时,当调用结束后,js函数里面的局部变量的值就会被垃圾回收机制回收释放,但在这里却是从99变成了101,并没有回收,这是为什么呢?原因在于a是b的父函数,而b是一个全局变量,这导致b始终在内存中,而b的存在依赖于a,所以导致a也始终在内存中,从而导致n变量没有被回收释放。至此,闭包的两大常用功能解析清楚。
下面接着谈谈js文件重名文件:
避免多个js方法名重合的最简单方法就是:采用类来封装js页码。基础写法如下“
var wdh = (function($){
var _this = {};
//定义变量
_this.a = '';
_this.b = '';
//定义方法
_this.c = function(){
}
_this.d =function(){}
return _this;
})(JQuery);
因为返回了_this,所以在其他地方调用时只需要用wdh.a wdh.c()这种即可。这样完美的避免了重复的问题。
上面之所以讲述了一些闭包的概念,是因为个人确实不理解下面我采用的这种避免方法名重复的方法到底和闭包有何联系,如果看到有会的人希望在下面留言解析下,在此谢谢了。
相关文章推荐
- JS截取与分割字符串常用技巧总结
- js轮播图
- GeoJSON介绍
- 在 JavaScript 中实现私有成员的语法特性
- 纯javascript响应式树形菜单效果
- vc 与 js应用
- JavaScript中SetInterval与setTimeout的用法详解
- sharepoint 中waiting screen dialog的使用方法(JSOM)
- js闭包
- WGS-84,GCJ-02,BD-09的js转换
- js判断是否是IE的简单方法
- DOM0, DOM1, DOM2, DOM3
- JS-全局和局部变量
- JS-动态和匿名函数
- 5.JavaScript优化及导航菜单背后的秘密
- 九九乘法表(javascript)
- JSTL标签提示:"items" does not support runtime expressions
- Newtonsoft.Json(Json.Net)学习笔记
- JavaScript中的函数表达式及递归
- js中点和向量的基本方法