作家
登录

js 在定义的时候立即执行的函数表达式(function)写法

作者: 来源:www.28hudong.com 2013-03-30 00:12:07 阅读 我要评论

1.前言 函数需要先定义,后使用。 这基本上所有编程语言的一条铁的定律。 一般状况下, 我们需要调用一个JavaScript 函数, 基本的状况都是先定义, 然后再调用。 看一个例子 复制代码 代码如下: <!--by oscar999 2013-1-16--> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Say Hello</title> </head> <body> <script> //define function function sayHello() { alert("hello"); } //call function sayHello(); </script> </body> </html> 但是如果不需要显示调用函数, 让这个函数在定义的时候就执行的话, 该如何写才可以呢? 2.思考的历程 从以上的例子来看,聪明的你结合以上的使用状况可能会想: ===》既然调用的时候是在函数名后面加上一对 是否在function 定义的后面加上一对大括号是否就可以执行了呢? 像以下这样: 复制代码 代码如下: function sayHello() { alert("hello"); }(); 不幸的是,以上的写法会报出js 的语法错误。 因为Javascript 的解析器在解析器解析全局的function或者function内部function关键字的时候, 默认会把大括号解析成function声明,而不是function表达式。也就是说, 会把最后的一对大括号默认解析成一个缺少名字的function,并且抛出一个语法错误信息,因为function声明需要一个名字。===》 你可能又会想, 如果我在大括号中传入参数是否就会解析成表达式了呢? 复制代码 代码如下: function sayHello() { alert("hello"); }(1); 的确, 错误是没有了。 但是以上的写法等同于以下写法的效果 复制代码 代码如下: function sayHello() { alert("hello"); }; (1); 这两句完全没有关系, 函数还是不会执行 3.正确的写法 对于JavaScript 来说,括弧()里面不能包含语句,所以在这一点上,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function声明所以,只要将大括号将代码(包括函数部分和在后面加上一对大括号)全部括起来就可以了。 复制代码 代码如下: (function sayHello() { alert("hello"); }()); 还有一种写法也可以, 就是将后面的大括号移出来, as 复制代码 代码如下: (function sayHello() { alert("hello"); })(); 推荐是使用第一种方式。 但是目前很多比较好的js library 使用的都是第二种方式。 比如: web 图形绘制的: git , draw2d ,....

  推荐阅读

  jQuery 插件仿百度搜索框智能提示(带Value值)

因公司需要做一个仿百度搜索框,并且带Value值的, 网上找了下只有Text, 都没带Value的 所以做了个. 直接贴代码。 复制代码 代码如下: (function($) { var timeid; var lastValue; var options; var c; var d; var t>>>详细阅读


本文标题:js 在定义的时候立即执行的函数表达式(function)写法

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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