javascript嵌套函数的效率问题
来源:互联网 发布:神魔诛天神器进阶数据 编辑:程序博客网 时间:2024/05/16 07:14
javascript嵌套函数的效率问题
javascript自诞生以来就是一门受争议的编程语言,很多人也对javascript的语法表示不解,例如javascript嵌套函数。本文来自Nettuts+的一篇教程,详细的介绍了javascript中嵌套函数效率问题,从小处说起,一直说到匿名函数、继承,感觉不错。
匿名函数
javascript开发中常用到匿名函数,例如事件处理函数、callback函数等,例如下面的事件处理函数:
document.addEventListener(
"click"
,
function
(evt) {
alert(
"You clicked the page."
);
});
这里给document创建了一个事件监听,当每次页面点击之后会alert出来一条消息。跟嵌套函数一样,每次点击需要创建一次匿名函数,处理事件完成之后再销毁。
jQuery中的each方法也是一个匿名函数,例如下面的代码,选择出来所有的a元素,并且添加each方法来处理a元素:
$(
"a"
).each(
function
(index) {
this
.style.color =
"red"
;
});
如果写成jQuery插件,可以下面的代码:
$.fn.myPlugin =
function
(options) {
return
this
.each(
function
() {
var
$
this
= $(
this
);
function
changeColor() {
$
this
.css({color : options.color});
}
changeColor();
});
};
javascript代码定义了一个名字为myPlugin的jQuery插件,插件中有一个嵌套函数changeColor,根据上面说的,上面的代码效率不如独立出来changeColor高,所以我们可以把changeColor拿到外部来,即下面的代码:
function
changeColor($obj, color) {
$obj.css({color : color});
}
$.fn.myPlugin =
function
(options) {
return
this
.each(
function
() {
var
$
this
= $(
this
);
changeColor($
this
, options.color);
});
};
经过修改过的jQuery插件在效率上提高了15%左右。所以说嵌套的函数越多,调用的次数越多,则可以优化的地方也越多。
使用prototype关键字
在javascript中有prototype这个关键字,prototype
的属性是实例化后的对象所共有的属性,所以上面的代码可以通过prototype改写成下面的方式:
function
Person(firstName, lastName) {
this
.firstName = firstName;
this
.lastName = lastName;
}
Person.prototype.getFullName =
function
() {
return
this
.firstName +
" "
+
this
.lastName;
};
var
jeremy =
new
Person(
"Jeremy"
,
"McPeak"
),
jeffrey =
new
Person(
"Jeffrey"
,
"Way"
);
这样getFullName
的方法是定义在Person.prototype
中的,为所有实例化的对象共有方法,所以jeremy和jeffrey的getFullName
是相等的(http://jsfiddle.net/Pfkua/)。他们之间的关系可以通过下面的图片来解释:
通过测试,我们可以看出来,第二种方法要比第一种方法在效率上面快了18%~96%。
总结
本文也不是说不要大家在javascript中写嵌套函数,只是要适当,要注意这个知识点,在频繁调用的函数内部是不推荐写javascript嵌套函数的。开发者写代码给用户用,为的就是高效代码提高用户体验。
英文全文:http://net.tutsplus.com/tutorials/javascript-ajax/stop-nesting-functions-but-not-all-of-them
- javascript嵌套函数的效率问题
- strtr函数的效率问题
- 虚函数的效率问题
- 提高javascript函数的执行效率
- JavaScript 嵌套函数中this的理解
- JavaScript嵌套函数this的重定向
- java和javascript双引号嵌套的问题
- javascript 嵌套函数
- 转载--javaScript函数嵌套
- for循环嵌套的效率
- for循环嵌套的效率
- Java8 Stream forEach()函数的效率问题
- C++中内联函数的效率问题
- oracle的查询&函数&效率问题
- JS嵌套函数调用上下文的问题
- 函数嵌套调用遇到的问题
- JavaScript函数调用及嵌套
- javascript要小心函数嵌套
- linux shell 之 grep简单使用
- SQLite 查询时异常:该字符串未被识别为有效的 DateTime 错误
- KMP
- 一些简单的c++程序的链接
- html5 worker 求素数
- javascript嵌套函数的效率问题
- How to generate memory dump while application is running.
- 解决Ubuntu 10.04 睡眠后不能唤醒的问题
- 参数传递(输入三个数从大到小排序)
- 嵌入式linux学习步骤
- 破解android系统的好网站
- 在Flash Builder 4.7的纯AS项目中使用Flex SDK
- 告别谷歌拼音输入法
- 关于嵌入式的推荐网站(逐渐的更新中)