作家
登录

Javascript 匿名函数及其代码模式原理

作者: 来源:www.28hudong.com 2013-03-30 01:45:32 阅读 我要评论

关于什么是匿名函数,及它带来的优势在本文就不深究了,先抛出一个常用的匿名函数: (function(){alert('yo')})() 很多同学知道怎么用这种匿名函数,却或许并不明白为什么这样写就能够调用匿名函数。也许知道后面的圆括号是执行前面的函数,而并不清楚前面的圆括号具有何种含义!本文将带你了解匿名函数的代码模式原理。 OK,先来看看更多匿名函数调用模式: 复制代码 代码如下: (function(){alert(1);}()) (function(){alert(2);})() void function(){alert(3);}() 以上3个都是正确的,且在功能上都是等同的。 再来看下错误的书写方式: 4. function(){alert('yo')}() 上面这段代码会抛出语法错误,这究竟是为什么呢?带着这个问题我们来看看秦歌给出的解答: 1.函数字面量:首先声明一个函数对象,然后执行它。 2.优先表达式:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。 3.void操作符:用void操作符去执行一个没有用圆括号包围的一个单独操作数。 好吧,先不管解答是否正确,我们把这些放到一边,再来看看函数声明的语法和函数表达式的语法说明: 一、函数声明: 复制代码 代码如下: function name([param[, param[, ... param]]]) { statements } 这里的函数名称name是不可以省略的。如果省略了函数名称就会报错。 这也合理解释了为什么直接写 function(){alert('yo')} 会出错?因为编译器当他是函数声明而代码中没有出现函数名称,结果可想而知。 二、函数表达式: 复制代码 代码如下: function [name]([param] [, param] [..., param]) { statements } 函数名称name可以被省略,省略name就是所谓的匿名函数。说明一点:如果需要创建匿名函数,则必须给出一个函数表达式而非函数的显式声明 现在我们可以做出更准确的解释: 123匿名函数代码模式只不过是通过括号或者void告诉编译器,把function(){}当作函数表达式来解释罢了。这其中并没有那么复杂的优先级和void操作符原理。这只不过是一个简单的语法转换。 可以想象,只要符合函数表达式的语法,我们就可以创建出N种匿名函数代码模式,比如 复制代码 代码如下: !!function(){ alert('yo'); }() +function(){ alert('yo'); }() 等等等等…… 这其中并没有更深层的奥秘,只是函数声明与表达式的区别,如果你还不理解,也许就是你想多了想复杂了。 我们现在学习Javascript还没有特专业的培训安排与课程,编码能力的提升都是要靠自己平时的练习与积累。然而越是这样越容易忽略最基础的知识,最后把简单的问题复杂化,不可取。更有些同学是抱着能够使用的态度学习Javascript,而并不去深究,知其然而不知其所以然,其实到最后能力并没有多大的提升……更不可取! 延伸阅读:What do parentheses surrounding a JavaScript function declaration mean?

  推荐阅读

  javascript 操作select下拉列表框的一点小经验

按照我一贯的web开发风格,所有不直接操作数据库的事件,都尽可能由javascript来实现,所以这个需求我打算使用js来完成。 首先来分析一下具体情况:这个页面是一个更新页面,品牌有品牌1和品牌2两个字段,品牌2可以>>>详细阅读


本文标题:Javascript 匿名函数及其代码模式原理

地址:http://www.17bianji.com/kaifa2/JS/26808.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)