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

简介:  js 前加感叹号是什么意思?比如!function(){}(); 答案在这里 2016-05-1223:25 1773人阅读  分类:Web-H5-CSS3-JS(10) 此文出自 http://q.cnblogs.com/q/52920/感谢原创作者和转载者,感谢提问人和解答人。
2016-05-12 23:25  1773人阅读 
如何定义立即执行函数?【转】  分类:

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

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


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

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

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

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

(function(){})();


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

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

 

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

 

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

目录
相关文章
|
7月前
|
JavaScript 前端开发 数据安全/隐私保护
闭包对于保护私有变量和函数的作用
JavaScript中的闭包用于创建私有作用域,保护变量和函数不被外部直接访问。它们实现封装和信息隐藏,防止全局命名冲突,确保数据安全和稳定性。闭包还支持访问控制和持久状态保持,常用于模块化、数据隐藏等,增强代码的可维护性、可重用性和安全性。
|
7月前
|
编译器
关于被调用函数的声明和函数原型
在编程中,当我们在一个源文件中调用一个在其他源文件中定义的函数时,就需要对该函数进行声明,以便编译器知道该函数的存在、其返回类型以及它接受的参数类型和数量。这种声明通常被称为函数原型或函数的前向声明。
110 0
|
1月前
|
JavaScript 前端开发
块级作用域和函数作用域有什么区别?
【10月更文挑战第29天】块级作用域和函数作用域在JavaScript中各有特点和用途。块级作用域提供了更精细的变量控制,有助于避免变量提升和意外的全局变量污染等问题;而函数作用域则在函数封装和模块化编程等方面有着重要的应用。在实际开发中,需要根据具体的需求和场景合理地选择使用哪种作用域来声明变量和组织代码。
|
2月前
|
缓存
函数的定义、调用、箭头函数、闭包
函数的定义、调用、箭头函数、闭包
15 0
|
4月前
|
JavaScript 前端开发
IIFE(立即执行函数表达式)
IIFE(立即执行函数表达式)
46 1
|
4月前
函数声明与函数表达式的区别是什么?
函数声明与函数表达式的区别是什么?
47 0
|
5月前
|
自然语言处理 JavaScript 前端开发
理解闭包的定义
【7月更文挑战第10天】闭包是编程中的关键概念,特别是函数式编程中。它是函数及其相关引用环境的组合,能访问词法作用域内外的变量,即使外部函数已执行完毕。闭包提供封装私有变量、保持状态、延迟执行的功能,常用于模块化、函数工厂、模拟私有方法和回调。JavaScript中通过函数嵌套实现闭包,但也可能导致内存泄漏和性能问题。
110 2
|
7月前
|
JavaScript 前端开发
函数声明与函数表达式的区别
函数声明与函数表达式的区别
33 2
函数修饰器的理解
函数修饰器的理解
37 0
|
存储
函数声明与函数表达式的区别?
函数声明与函数表达式的区别?
37 0