如何定义立即执行函数?【转】

 

js 前加感叹号是什么意思?比如
!function(){}(); 答案在这里 

2016-05-12
23:25 1773人阅读 

 分类:

Web-H5-CSS3-JS(10) 

此文出自 http://q.cnblogs.com/q/52920/

感谢原创作者和转载者,感谢提问人和解答人。

!function(){}();   !有什么用?

从语法上来开,JavaScript中分号表示语句结束,在开头加上,可能是为了压缩的时候和别的方法分割一下,表示一个新的语句开始。所以,如果在一个单独的JS文件中,开头的分号是没有任何意义的,可以删掉。

叹号是逻辑运算符,是“非”的意思,常见这种写法
if(!true){};而将运算符加载函数定义的前面,则是将函数看做一个整体,然后再调用这个函数,并对返回的结构进行逻辑运算。

说白了,此处就是构建了一个立即执行函数,建议楼主知道意思就可以,自己写的时候,可以使用更清晰的格式:

(function(){})();

楼上已经给出很详细的解说了。

这里补充一点:在函数声明【 function (){} 】后面加【 ()
】,意思是执行这个函数声明。有的叫法是“匿名自动执行函数”,更准确的表示应该为“立即执行函数”。

 

但立即执行函数,要作为表达式的一部分才行,不然js解释器会报语法错误。一般,成为表达式的最容易理解方式是:在左右两端加一个圆括号,像这样【
(function (){}) 】。所以,立即执行函数最常见的写法是【 (function (){})()
】,这是一个语句,在前面和后面都可以加【 ; 】。

 

其实立即执行函数还有N种写法,比如【 (function (){}) 】也行,在函数声明前加一元运算符也行:【 !function
(){}() 】、【 ~function (){}() 】。甚至,对一元运算符进行组合也可以:【 !!!!function
(){}() 】、【 ~~~function (){}() 】、【 !~!function
(){}() 】。

时间: 2024-08-07 18:16:25

如何定义立即执行函数?【转】的相关文章

c中函数定义与主函数不太清楚

问题描述 c中函数定义与主函数不太清楚 #include #include #define len sizeof(struct student) struct student { long num; char cla[20]; char name[20]; float score; struct student *next; }; void main() { int n,w,i,c,m,y; n=0; void max(struct student *head); int revise(stru

《AngularJS高级程序设计》——5.4 定义并使用函数

5.4 定义并使用函数 当浏览器处理HTML文档时,它会一个挨一个地往下读.当其遇到script元素,就立刻按其定义顺序执行所包含的JavaScript语句. 这就是前面的例子中发生的,向控制台写了两条消息.你也可以将多条语句包成函数,在浏览器遇到调用该函数的语句前它不会执行,如清单5-4所示. 清单5-4 在文件jsdemo.html中定义JavaScript函数 定义函数很简单:使用function关键字,后面跟着你想的函数名,然后是一对括号("("和")").

深入理解javascript中的立即执行函数(function(){…})()_基础知识

javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( function(){-} )()和( function (){-} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函数定义后立即执行的目的,后来发现加括号的原因并非如此.要理解立即执行函数,需要先理解一些函数的基本概念.

深入浅析javascript立即执行函数_javascript技巧

javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花; 当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解.  JavaScript 函数语法 函数就是包裹在花括号中的代码块,前面使用了关键词 function: function functionname() { 这里是要执行的代码 } 当调用该函数时,会执行函数内的代码. 可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript

javascript中运用闭包和自执行函数解决大量的全局变量问题_javascript技巧

但是从全局看来,这样会导致出现一些让我们难以掌控的情况的出现:变量同名.多个函数共用一个全局变量后的值的变换--等等.所以,有时候,对于一些简单的全局变量,我们可以通过另一种方式来处理--用自执行函数+闭包的方法来解: 比如:我们要在网页加载时给出一个提示,在网页关闭时给出另一个提示 下面的代码,实现了以上功能 复制代码 代码如下: var msg1 = "欢迎光临!"; // 定义一个全局变量 var msg2 = "再见!" //定了另一个全局变量 window

javascript从定义到执行 你应知这些事

javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境 栈.全局对象.执行环境.变量对象.活动对象.作用域和作用域链等,这些概念正是JS引擎工作的核心组件.这篇文章的目的是孤立的为你讲解每一个概念,而 是通过一个简单的demo来展开分析,全局讲解JS引擎从定义到执行的每一个细节,以及这些概念在其中所扮演的角色. var x = 1;  //定义一个全局变量 x  function A(y){     var x 

函数式宏定义与普通函数的区别_C 语言

在C及C++语言中允许用一个标识符来表示一个字符串,称为宏,该字符串可以是常数.表达式.格式串等.在编译预处理时,对程序中所有出现的"宏名",都用宏定义中的字符串去代换,这称为"宏代换"或"宏展开".宏定义是由源程序中的宏定义命令完成的.宏代换是由预处理程序自动完成的.若字符串是表达式,我们称之为函数式宏定义,那函数式宏定义与普通函数有什么区别呢? 我们以下面两行代码为例,展开描述:函数式宏定义:#define MAX(a,b) ((a)>

深入解析JavaScript中的立即执行函数_基础知识

它是什么在 JavaScript 里,每个函数,当被调用时,都会创建一个新的执行上下文.因为在函数里定义的变量和函数是唯一在内部被访问的变量,而不是在外部被访问的变量,当调用函数时,函数提供的上下文提供了一个非常简单的方法创建私有变量. function makeCounter() { var i = 0; return function(){ console.log(++i); }; } //记住:`counter`和`counter2`都有他们自己的变量 `i` var counter =

javascirpt匿名自执行函数小结

看很多的网站的js文件,要面对的第一函数通常是匿名自执行函数,形如(function(){})(),它的作用有两个,一是匿名,在java中有匿名内部类,作用类似.匿名的意思是没有声名函数的名字,这样就使得函数外部无法访问匿名自执行函数的内部,防止函数之间变量命名的相互干扰,比如说有两个人写了两个js,放在同个网页中,如果它们没有用匿名函数包裹,这两个js文件之间的函数会互相调用,导致错误的产生. 那么如何访问匿名函数里面的函数呢?通常是在里面的函数或变量前加上window,这样该函数或变量就成为