JS之立即执行函数

一。定义:

此类函数没有声明,在一次执行后即释放(销毁)。

好处:为了避免变量污染(命名冲突),适合做初始化工作。相当于创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏污染全局的命名空间。

(PS:: 立即执行函数有预编译,有执行期上下文,但运行结束后会销毁

二。官方写法:(有两种)

1.这种也是W3C标准推荐的一种写法:

一个匿名函数后面跟一个小括号,然后整个包裹在一个括号运算符中

  ( function () {} () );

2.第二种写法:

一个匿名函数包裹在一个括号运算符中,后面再跟一个小括号

      ( function(){} )();

三。和闭包结合的一个实例:

在下面闭包代码中填写代码,在页面输出0123456789

<script type="text/javascript">
		function test(){
			var arr=[];
			for(var i = 0;i < 10;i++){
				//此处填写代码
			}
			return arr;		
		}
		var myarr = test();
		for(var j = 0;j < 10;j++){
			myarr[j]();
		}
	</script>

解决思路: 使用立即执行函数。读到这里就会立即执行,即在for循环中就被执行了。

知识点: for循环嵌套函数,然后保存到外部。闭包。立即执行函数。

    解决代码如下:

                (function(j){
					arr[j] = function(){
						document.write(j+"");
					}
				}(i));

四。在后期的一些学习中整理了一些知识点,供大家参考学习一下:

1.只有表达式才能被执行符号执行。

这里涉及了函数声明、函数表达式、匿名函数三个概念,给大家解释一下。

1.)函数声明: function关键字 + 函数名

function fnName() {...} ; 

2)函数表达式:var 变量名 = function关键字 + 函数体执行语句  (这里不存在函数名

var fnName = function() { ... } ; 

3)匿名函数:function + 函数体执行语句  (这里不存在函数名

function() { ... } ; 

匿名函数属于函数表达式。他的好处很多——1.赋予一个变量则创建函数  2.赋予一个事件则成为事件处理程序或创建闭包

通俗的讲,立即执行函数里面必须是一个函数表达式。

2.一个表达式被执行了后,他有一个天生的功能:忽略这个函数的名字

function test(){
   console.log(a);
}();
在执行后,test被销毁

PS:面试题在这里我分享一个非常有趣的题目给大家,是阿里的一个面试题,正好涉及了这里,非常的具有迷惑性。

大家看一下下面这段代码,猜一下页面会发生什么有趣的事情。

<script type="text/javascript">
		function test(a,b,c,d){
			console.log(a+b+c+d);			
		}(1,2,3,4);
		
</script>

你肯定猜想在控制台上会输出一个加和,即10是吧。我一开始也是这样猜想的,实际上并不是这样。看下图:

很有趣是吧,它什么也没发生。计算机没有报错,也没有执行里面的内容。

当时我也很有疑惑,经过我百度知识点,查了一些东西以后,我简略的给大家讲一下。

在计算机内部,他的代码是识别成这个样子的:

<script type="text/javascript">
		function test(a,b,c,d){
			console.log(a+b+c+d);			
		}








           (1,2,3,4);
		
</script>

计算机理解为 这是一个函数声明,函数声明后面跟着这样一个东西:  
          一个逗号运算符,逗号运算符外面跟了一个括号。
我们知道逗号运算符的运算结果是4,但是跟在函数声明后面并没有什么卵用,所以计算机内部系统最终还是把它识别为一个函数声明,而这仅仅是一个声明,并没有函数执行。所以页面上,控制台上什么都没有。这很有趣是吧

好了,立即执行函数就给大家分享到这里了,如果大家还想了解一些其他比较有趣的前端小知识,请关注我。

我会随时更新一些比较有趣的知识的。

猜你喜欢

转载自blog.csdn.net/ferrysoul/article/details/81368383
今日推荐