js函数2

10 篇文章 0 订阅
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<!--这里主要学习函数
		函数是对象,函数名为指针
		1.函数的3种初始化方式,注意:函数声明会被提升源代码的顶部;
		2.函数不支持重载,因为它是对象
		3.函数本身可以作为入参;
		4.函数的内部属性:
		    2个对象:arguments和this(调用该函数的对象)
		    arguments属性: length  callee(指向该函数的指针)  caller(undefined)
		        函数名的属性:
		        caller,如test.caller(表示调用该函数的引用,可以用来查询调用方源码).
		                目的:加强语言的安全性,不太理解..
		        length:声明入参的个数
		        protoType:重点
		        函数名的方法:
		        apply:作用:在特定的作用域调用函数,入参 this,arguments对象或者数组
		        call:作用:在特定的作用域调用函数,入参 this,p1,p2,..,必须明确的传入每一个参数
		                主要用来扩充作用域
		        bind:创建一个函数的实例,可以改变全局方法的this
		        toString(),toLoclString(),valueof返回函数代码
	-->
	
	<script type="text/javascript">
		//函数声明
		function sum (num1,num2) {
		   return sum1+sum2;	
		}
		//等价   
		var sum=function  (num1,num2) {
			return 2*(num1+num2);
		}
		console.log(sum(1,2));
		var sum=new Function('num1','num2','return 3*(num1+num2)');
		console.log(sum(1,2));
		
		
		//函数作为入参,可以用做包装
		function sumBao (functionName,argu1,argu2) {
			if(functionName){
				return functionName(argu1,argu2);
			}else{
				return undefined;
			}
		}
		
		//按照指定属性
		function sortByPropName (propName) {
			var flag;
			return function  (obj1,obj2) {
				if(obj1[propName]>obj2[propName]){
					flag=1;
				}else if(obj1[propName]<obj2[propName]){
					flag=-1;
				}else{
					flag=0;
				}
				console.log(flag);
				return flag;
			}
		}
		
		function test () {
			//比较器:按照对象的某一个属性比较
			var objs=[{name:'G',age:50},{name:'B',age:45},{name:'H',age:20},{name:'D',age:56}];
//			objs.sort(
//				function (obj1,obj2) {
//					return obj1.age-obj2.age;
//				}
//			);

//			objs.sort(
//				sortByPropName('age')
//			);
			objs.sort(
				sortByPropName('name')
			);
			//遍历
			objs.forEach(function  (item,index,arr) {
				console.log(item.name+'---'+item.age);
			});
			
			console.log('分割线-----------------');
		}
		
		//递归
		function jiecheng (num) {
			if(num<2){
				return 1;
			}else{
			  return num*jiecheng(num-1);
			}
		}
		//等价
		function jiecheng (num) {
			if(num<2){
				return 1;
			}else{
			  return num*arguments.callee(num-1);
			}
		}

		
		
		//获取调用方的代码
		function callerTest () {
//			console.log(callerTest.caller);
            //等价
			console.log(arguments.callee.caller);
		}
		//调用方
		function yingyong () {
			callerTest();
		}
		
		//this的运用
		color='red';
		function thisTest () {
			console.log(this.color);
		}
		var obj={color:'bule'};
		thisTest();//red
		obj.thisTest=thisTest;
		obj.thisTest();//bule
		
		//简洁的方法如下
	    function thisTest2 () {
			console.log('thisTest2:'+this.color);
		}
	    //指定对象
	    thisTest2.call(window);
	    thisTest2.call(obj);
		
		//绑定对象,返回指定对象的方法
		var thisTest2Obj=thisTest2.bind(obj);
		thisTest2Obj();
		
		
		//math的使用
		function Mathtest () {
			var arr=[34,2,4,5];
			console.log(Math.max(23,1,2));
			console.log(Math.max.apply(Math,arr));
		}
		
		window.function  () {
			//函数作为入参
			console.log(sumBao(sum,10,20));
//			test();
			console.log('阶乘结果:'+jiecheng(4));
			yingyong(); 
			Mathtest();
		}
		
		
	</script>
	
	<body>
	</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值