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

简介:  js 前加感叹号是什么意思?比如!function(){}(); 答案在这里 2016-05-1223:25 1773人阅读  分类:Web-H5-CSS3-JS(10) 此文出自 http://q.cnblogs.com/q/52920/感谢原创作者和转载者,感谢提问人和解答人。
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 (){}() 】。

目录
相关文章
|
14天前
|
JavaScript 前端开发 数据安全/隐私保护
闭包对于保护私有变量和函数的作用
JavaScript中的闭包用于创建私有作用域,保护变量和函数不被外部直接访问。它们实现封装和信息隐藏,防止全局命名冲突,确保数据安全和稳定性。闭包还支持访问控制和持久状态保持,常用于模块化、数据隐藏等,增强代码的可维护性、可重用性和安全性。
|
2月前
|
编译器
关于被调用函数的声明和函数原型
在编程中,当我们在一个源文件中调用一个在其他源文件中定义的函数时,就需要对该函数进行声明,以便编译器知道该函数的存在、其返回类型以及它接受的参数类型和数量。这种声明通常被称为函数原型或函数的前向声明。
21 0
|
2天前
|
JavaScript 前端开发 Python
函数与作用域
编程中的函数与作用域概念。函数是可重用的代码块,能提高代码的可读性、可维护性和复用性。基础用法包括定义、调用和返回值。高级用法涉及函数嵌套、匿名函数(lambda函数)和装饰器。装饰器能在不修改原函数代码的情况下添加功能。 作用域决定了变量的可见范围,从内到外是局部、嵌套、全局和内置作用域。闭包是能访问外部函数变量的内部函数,即使外部函数执行完毕,闭包仍能保留其状态。闭包常用于实现特殊功能,如记忆化和延迟执行。 立即执行函数表达式(IIFE)是JavaScript中的模式,用于创建私有作用域和防止变量污染全局。IIFE常用于封装变量、避免命名冲突以及实现模块化和函数作为参数传递。
|
15天前
|
JavaScript 前端开发
函数声明与函数表达式的区别
函数声明与函数表达式的区别
10 2
|
29天前
函数声明与函数表达式的区别是什么?
函数声明与函数表达式的区别是什么?
9 1
|
5月前
|
缓存
函数的定义、调用、箭头函数、闭包
函数的定义、调用、箭头函数、闭包
16 0
|
6月前
|
存储
函数声明与函数表达式的区别?
函数声明与函数表达式的区别?
19 0
|
11月前
|
Linux 网络架构
暂时性死区以及函数作用域
暂时性死区以及函数作用域
111 0
|
前端开发 JavaScript
web前端-JavaScript中的函数(创建,参数,返回值,方法,函数作用域,立即执行函数)
web前端-JavaScript中的函数(创建,参数,返回值,方法,函数作用域,立即执行函数)
71 0
|
自然语言处理 JavaScript 前端开发
这次写的不只是函数作用域,而是。。。。
这次写的不只是函数作用域,而是。。。。
83 0
这次写的不只是函数作用域,而是。。。。