Javascript 匿名函数及其代码模式原理
转自http://www.cnblogs.com/Lion5859/archive/2009/10/16/1584767.html
文章写的很好,对我启发很大
关于什么是匿名函数,及它带来的优势在本文就不深究了,先抛出一个常用的匿名函数:
(function(){alert('yo')})()
OK,先来看看更多匿名函数调用模式:
1.
(function(){alert(1);}())
2.
(function(){alert(2);})()
3.
void function(){alert(3);}()
(function(){alert(1);}())
2.
(function(){alert(2);})()
3.
void function(){alert(3);}()
以上3个都是正 确的,且在功能上都是等同的。
再来看下错误的书写方式:
4.
function(){alert('yo')}()
function(){alert('yo')}()
1.函数字面量:首先声明一个函数对象,然后执行它。
2.优先表达 式:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。
3.void操作符:用void操作符去执 行一个没有用圆括号包围的一个单独操作数。
好吧,先不管解答是否正确,我们把这些放到一边,再来看看函数声明的语法和函数表达式的语法 说明:
一、函数声明:
function name([param[, param[, ... param]]]) {
statements
}
statements
}
这也合理解释了为什么直接写
function(){alert('yo')}
二、函数表达式:
function [name]([param] [, param] [..., param]) {
statements
}
statements
}
现在我们可以做出更准确的解释:
1\2\3匿名函数代码模式只不过是通过括号或者void告诉编 译器,把function(){}当作函数表达式来解释罢了。这其中并没有那么复杂的优先级和void操作符原理。这只不过是一个简单的语法转换。
可 以想象,只要符合函数表达式的语法,我们就可以创建出N种匿名函数代码模式,比如
!!function(){
alert('yo');
}()
+function(){
alert('yo');
}()
alert('yo');
}()
+function(){
alert('yo');
}()
等 等等等……
我们现在学习 Javascript还没有特专业的培训安排与课程,编码能力的提升都是要靠自己平时的练习与积累。然而越是这样越容易忽略最基础的知识,最后把简单的问 题复杂化,不可取。更有些同学是抱着能够使用的态度学习Javascript,而并不去深究,知其然而不知其所以然,其实到最后能力并没有多大的提升…… 更不可取!