JavaScript立即执行函数的解释分析(4)—总结篇
2017-06-19 17:23
609 查看
说明
这次来对立即执行函数 Immediately-Invoked Function Expression (IIFE) ,做最后的总结,会把前面几篇提到的内容做一个整合,这样立即执行函数就算是说完了。解释
我们回到最初,看代码(function (){ console.log(1); })(); (function (){ console.log(2); }());
这是两种比较常见的立即执行函数的写法,这里提两点注意事项!!!
1、函数调用,需要 函数表达式 (),这样来调用,如果是 函数声明 (),就会报错。
var a=function (){ console.log(1); }(); //可以输出1,( )前面是函数表达式 function b(){ console.log(2); } b(); //可以输出2,( )前面是函数表达式 function c(){ console.log(3); }(); //报错,( )前面是函数声明
2、javascript中圆括号()里面不能包含语句,所以在这一点上,解析器在解析function关键字的时候,会将相应的代码解析成函数表达式,而不是函数声明。
(function c(){ console.log(3); })(); //可以输出3,( )前面是函数表达式
所以我们明白了,为什么最开始的那两种立即执行函数的写法,可以起作用了,因为()把函数声明解析为了,函数表达式,而函数表达式与()一起使用,就能调用函数了,所以,我们只要把函数声明变为函数表达式,然后搭配(),就可以调用函数了,请看这些写法。
+function (){ console.log(1); }(); -function (){ console.log(2); }(); !function (){ console.log(3); }(); delete function (){ console.log(4); }(); void function (){ console.log(5); }(); ~function (){ console.log(6); }();
+、-、!、delete、void、~、()等其他一些运算符,都可以将函数声明转换为函数表达式,所以立即执行函数的写法是多种多样的,但是用()的方法会更清楚一些。
作用
立即执行函数,可以避免全局变量的污染定义一个全局变量a,第一次能打印出来,第二次也能打印出来,用立即执行函数的写法,在函数中也定义一个变量a,函数执行了,打印了a,然后再次打印 a 的时候,打印出的是全局变量的a,立即执行函数中的变量a已经没有了。(函数执行后,函数中的变量如果没有被继续引用,就会被释放),而全局变量a,还是存在的,所以,立即执行函数可以避免全局变量的污染 , 也防止产生冲突。
当函数只需要执行一次的时候,我们选择立即执行函数的方式也是很好的。
总结
立即执行函数,相信大家应该明白了,到此算是把立即执行函数说完了,如果文中有什么问题,也非常欢迎大家指正。相关文章推荐
- JavaScript立即执行函数的解释分析(4)—总结篇
- JavaScript立即执行函数的解释分析(1)—表达式与语句的区别
- JavaScript立即执行函数的解释分析(3)—谈谈圆括号()
- JavaScript立即执行函数的解释分析(1)—表达式与语句的区别
- JavaScript立即执行函数的解释分析(2)—函数表达式与函数声明的区别
- JavaScript立即执行函数的解释分析(3)—谈谈圆括号()
- JavaScript立即执行函数的解释分析(2)—函数表达式与函数声明的区别
- 深入理解javascript中的立即执行函数(function(){…})()
- JavaScript学习笔记(十四) 立即执行函数
- javascript模块化:立即执行函数(function(){…})()
- javascript立即执行函数
- Javascript立即执行函数
- 详解JavaScript立即执行函数表达式
- (译)详解javascript立即执行函数表达式(IIFE)
- 深入浅析javascript立即执行函数
- 132 javascript 理解立即执行函数
- JavaScript中OnLoad几种使用方法,onload 后面执行的函数不能加括号 加了就立即执行。
- JavaScript立即执行函数的三种不同写法
- Javascript立即执行函数
- JavaScript立即执行函数的三种不同写法