高级函数

高级函数

1:基本类型和引用类型?

基本:number string boolean null undefined
var a=1;
引用: object,函数
var arr=[];
function fun(){

}

2:基本类型和引用类型的区别?

基本类型是值的传递,引用类型是地址的传递。

3:js的内存方式?

当在js中写完一句js代码的时候,js会自动开辟内存空间。

内存分为2种:

	栈内存:
	
		存储的是基本类型
		
	堆内存:
	
		存储的是引用类型

4:js执行代码的过程。

1:首先要进行预解析

	预解析,解析的是js中的关键字  var 和 function。
	
			会把关键字提前。
			
	变量的预解析:
	
		先声明,后定义。
		
	函数的预解析:
	
		声明和定义同时执行。

5:函数内部的属性:

函数的属性分为3种:this,arguments,prototype

this的功能:

this的功能具有指向性!

分析this的指向功能:

1:如果在绑定事件函数中,this指向事件前对象。

举例:
btn.onclick=function(){
	alert(this)
}
2:在其他函数中,谁调用这个函数,this就指向谁!

6:匿名函数:

自己自我调用的函数就是匿名函数,函数没有命名也是匿名函数

举例:
()()	
var a=function(){}
//	匿名函数写法1:
//	var a=function(){
//			
//		}
//	匿名函数写法2:
//	(function aa(){
//		alert(12312)
//	})()

//	(function aa(a,b){
//		alert(a+b)
//	})('老栗好帅','臭不要懒得')
//	匿名函数写法3:
//	~(function aa(){
//		alert('饿了')
//	})()
//	~function aa(){
//		alert('饿了')
//	}()
//	匿名函数写法4:
//	-function aa(){
//		alert('饿了吗')
//	}()
//	+function aa(){
//		alert('饿了吗了')
//	}()
//	!function aa(){
//		alert('饿了吗了好')
//	}()

匿名函数的优点:

1:减少函数命名,节省代码和内存空间

2:防止函数命名冲突

3:内部变量不容易被获取。

匿名函数的缺点:

1:内部变量不容易被获取。

7:全局变量和局部变量,全局作用域和局部作用域

全局变量:

	函数外有关键字  var声明的变量
	
	window对象下声明的属性
	
	不加关键字var 的变量
	
全局变量作用域全局window下,只能下面的代码获取。

局部变量:

	在函数中加var关键字的变量或函数的形参,对象的属性都是局部变量。

全局作用域:

	变量声明在windon下,所有作用于全局。
	
局部作用域:

	变量是私有的,作用当前的函数或对象内部。

8:作用域链

创建好一个函数时,会自动生成一个链条,函数中查找某个属性时,

第一链条有这个属性或者变量,就会直接执行找到,没有就会向上查找,直到找到,

全局也找不到,就会抛出异常(报错),这个过程就是作用域链!
<script type="text/javascript">
		var color='red';
		function sum(){
			function sun(){
				alert(1)
			}
			function son(){
				alert(2)
			}
			sun();
			son();
		}
		sum()
//		它会从链的第一个对象开始查找,
//		如果这个对象有一个名为 x 的属性,
//		则 会直接使用这个属性的值,
	</script>

9:闭包函数

1:闭包就是能够读取其他函数内部变量的函数。

这种写法就可以获取到函数内部的局部变量,b函数就是闭包

function a(){
	var n=9;
	function b(){
		alert(n)
	}
	return b;
}
var num=a();
num();

2:闭包的用途

闭包可以用在许多地方。

它的最大用处有两个,一个是前面提到的可以读取函数内部的 变量,

另一个就是让这些变量的值始终保持在内存中。

3:闭包的缺点:

使用闭包的注意点 由于闭包会使得函数中的变量都被保存在内存中,

内存消耗很大,所以不能滥用闭包, 

否则会造成网页的性能问题,

在 IE 中可能导致内存泄露。

解决方法是,在退出函数之前, 

将不使用的局部变量全部删除。

闭包会在父函数外部,改变父函数内部变量的值。

所以,如 果你把父函数当作对象(object)使用,

把闭包当作它的公用方法(Public Method),

把 内部变量当作它的私有属性(private value),

这时一定要小心,不要随便改变父函数内 部变量的值。
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
//			function a(){
//				var n=9;
//				function b(){
//					alert(n)
//				}
//				return b;
//			}
//			var num=a();
//			num();







//
//			function a(){
//				return '哈哈';
//			}
//			var b=a;
//			alert(b())
//			
//			function a(){
//				return '哈哈';
//			}
//			var b=a();
//			alert(b)


//			function a(){
//				function b(){
//					alert(3)
//				}
//				return b;
//			}
//			var nn=a();
//			nn();



//			function f1(){
//				var n=9;
//				add=function(){
//					n+=1;
//				}
//				function f2(){
//					alert(n);//10
//				}
//				return f2;
//			}
//			var reslut=f1();
//			add();
//			reslut();//10
//			add();
//			reslut();//11

			
			function sun(){
				function son(){
					alert(3)
				}
				return son;
			}
			sun();

		</script>
	</body>
</html>

10:垃圾回收机制

垃圾回收机制,就是变量释放自己内存空间的过程。

局部变量的释放是当函数执行完成一次以后,就会释放自己的内存空间,

全局变量的释放就是关闭浏览器后,会释放自己的内存空间。
<script type="text/javascript">
		var a=3;
		function sum(){
			var b=4;
			alert(b);
			alert(a);
		}
		sum();
	</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值