JavaScript-预解析,回调函数,闭包总结

预解析

/* 把变量和函数的定义提升到所在作用域的前面
            不提升赋值,不提升调用
            先提升var,再提升function */

预先解析变量定义(先)和函数定义(后),也就是先提升var,再提升function,但不会提升赋值和函数调用。

<script type="text/javascript">
			//案例一
			var a=1;
			function fun(){
				alert(a);		//局部变量与全局同名,会覆盖全局变量,这里相当于alert前面加一行var a; 
				var a=2;
			}
			fun();				//所以结果为undefined,预解析的原因
			
			//案例二
			// alert(num);
			// var num=10;
			// 等价于
			// var num;			//只提前定义,不提前赋值/函数
			// alert(num);
			// num=10;
		</script>

这篇帖子举例更加详细

回调函数

简单的说,就是函数作参数

函数A作为参数传递到另一个函数B中,并且在函数B中执行函数A

代码举例一:

<script type="text/javascript">
			function f1(fn){				
				fn();						//第二步,找到f1声明,执行fn=f f2()
			}
			function f2(){					
				document.write("回调函数");	//第三步,执行f2()
			}
			f1(f2);							//第一步,函数调用
		</script>

代码举例二:(使用JS断点调试观察代码执行更加清晰)

<script type="text/javascript">
			//可以自行决定函数何时可以被调用
			function fun(muf){
				muf("回调函数");
			}
			
			function f(a){
				alert(a);
			}
			function f1(){
				alert("bdqn");
			}
			fun(f);
			fun(f1);
		</script>

闭包

简单的说,就是函数作返回值

定义:定义在一个函数内部的函数,能够读取函数内部(局部)变量。也就是外部函数用内部函数作为返回值输出。

作用:可以读取函数内部的变量,让这些变量的值始终保持在内存中

注意:不可滥用

代码举例:


		<script type="text/javascript">
					function f1(){
						var num=1;
						function f2(){
							//var num=2;	//加上这一行,就不算闭包
							alert(num);		//闭包,num对f2相当于全局变量,对f1是局部变量(会一直保存在内存中)
						}
						return f2;			//函数作为返回值return
					}
					var result=f1();
					result();	
							
					// alert(f1);					//直接调用f1()
					// alert(f1());				//等价于f2(),但是直接调用f2(),会报错
					// alert(result);			//result为函数f2,结果输出f2的代码
				</script>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值