javascript自诞生以来就是一门受争议的编程语言,很多人也对javascript的语法表示不解,例如javascript嵌套函数。本文来自Nettuts+的一篇教程,详细的介绍了javascript中嵌套函数效率问题,从小处说起,一直说到匿名函数、继承,感觉不错。
嵌套函数效率
很多jser喜欢在javascript代码中使用嵌套函数,例如下面的例子就是一个典型的嵌套函数:
function foo(a, b) {
function bar() {
return a + b;
}
return bar();
}
foo(1, 2);
上面的代码中foo()
中嵌入了bar()
,当foo()
运行的时候,就会调用bar()
。javascript引擎不会创建bar()
函数,直到外部引用了foo()
,随着foo()
的运行结束,bar()
也会销毁。
当多次运行foo
的时候,javascript引擎就要在每次的运行foo
时创建bar
函数,而每次foo
结束就要销毁bar
函数,这是一个很费劲的工作。
那么为什么我们不把bar
函数拿出来,做为一个独立的函数,它在foo
外部只被创建一次,而不是多次,这样就大大的提高了代码效率。例如下面的代码:
function foo(a, b) {
return bar(a, b);
}
function bar(a, b) {
return a + b;
}
foo(1, 2);
当然这样做可能随着程序的复杂性,可能存在命名冲突的危险,所以jser需要在这方面权衡,或者采用命名空间来解决这个方式。下面是在jsperf中做的关于上面两个函数大量运行的速度测试http://jsperf.com/nested-named-functions。不同的浏览器测试的结果不同,但是总体来看,两个独立的函数要比相互嵌套的javascript函数效率提高10%~90%。