学习笔记——day31(函数)

函数

是一段可以复用的代码块

1、声明函数的三种方法

1)function命令

function print(s){
document.write(s+"<br/>");
}

2)函数表达式

var printStr =function(str){
document.write(str+"<br/>");
}

3)Function 构造函数 : 入门级别用的不多…

var add = new Function('x','y','return (x + y)');

2、函数的调用

print()
printStr("goodgoodstudy");
var result =add(1,2);

3、参数

function square(x) { //x 为形参
return x * x;
}
square(2) // 4 2 为实参

或 ||

/*
		 * 默认值,非真为1
		 */
			function test(a){
				a = a||1;
				return a;
			};
			
			//调用''
			var rs1 = test('');
//			alert(rs1);
			//0
			var rs2 = test(0);
//			alert(rs2);
			//不传
			var rs3 = test();
//			alert(rs3);

4、eval &jsonp

eval执行字符串,将字符串当作语句执行。

<script>
		/*
		 js是动态语言
		 * */
			/*var str = "var a = 1";
			eval(str);
			console.log(a);
			var str2 = "function add(a,b){return a+b;}";
			eval(str2);
			var rs = add(10,20);
			console.log(rs);
//			var rs2 = window.prompt("输入一个函数名称为test:");
//			eval(rs2);
//			test();
			var rs3 = window.prompt("你可以调用我的函数add,可以传递参数a,b,将返回a+b:");
			//str = "add(1,2)";
			var rs4 = eval(rs3);
//			alert(rs4);
			
			
			//请求http://www.baidu.com?callback=add
			//响应 "add({'id':100})"   
			function add(jsonp){
				console.log(jsonp.id)
			};
			var str = "add({'id':100})";
			eval(str);*/
			
		</script>
		<script type="text/javascript" src="js/test.js" ></script>
		<script>
//			alert(a);
			//调用函数
//			alert(test());
			function add(a,b){
//				alert("a+b="+(a+b))
			};
			/**
			 * 传递参数为json格式对象,要求有name,age属性
			 * @param {Object} obj
			 */
			function jsonp(obj){
				alert(obj.name+"--"+obj.age);
			}
		</script>
		<!--test2.js-->
		<!--script可以跨域-->
		<script type="text/javascript" src="js/test2.js" ></script>
		<script type="text/javascript" src="localhost:8080/hi/user?cb=jsonp" ></script>
		<!--<script>
			jsonp({"name":'zs',"age":18});
		</script>-->

5、 匿名函数

没有名字的函数,只调用一次

<script>
		/*匿名函数:
		 立刻调用*/
			/*var a = function(){
				
			};
			a();*/
			/*无参*/
			/*(function(){
				alert("helloworld");
			})();*/
			
			/*加法*/
			(function(a,b){
				alert(a+b);
			})(1,2);
		</script>

6、函数的闭包

定义:
在函数体内部的函数。闭包只在声明它的函数内部有效。
扩大了声明周期,所以消耗资源。

<script>
			function outter(){
				var a = 100;
				function inner(){
					//内部函数可以调用外部资源
					alert("inner"+a);
				};
//				inner();
				return inner;
			};
			
			
			//如何执行inner呢?
			//可扩大局部变量生命周期
			var i = outter();
			i();
			function outter2(){
				var count = 0;
				function inner(){
					count+=1;
					return count;
				};
				return inner;
			};
			
			var i2 = outter2();
			console.log(i2());
			console.log(i2());
			console.log(i2());
			console.log(i2());
			console.log(i2());
			console.log(i2());
			console.log(i2());
			
			//带参数的闭包
			function outter3(c){
				function inner(){
					c+=1;
					return c;
				};
				//返回内部函数丶引用,而不是调用!!!
				return inner;
			};
			
			var i3 = outter3(100);
			console.log(i3());
			console.log(i3());
			console.log(i3());
			console.log(i3());
			console.log(i3());
			console.log(i3());
			console.log(i3());
			
			
		</script>

7、递归

<script>
			/*
			 Σ100=1+2+3+....100
			 * */
			/*var sum = 0;
			for(var i = 1;i<=100;i++){
				sum+=i;
			};
			console.log("Σ100="+sum);*/
			
			/*
			 * 要点:
			 * 	递归头:
			 * 		开始返回值
			 * 		Σ1 = 1;
			 * 	递归体:
			 * 		重复执行的代码
			 * 		Σn=Σ(n-1) +n
			 * 
			 Σ100=1+2+3+....100
			 Σ100=Σ99+100;
			 Σ99=Σ98+99;
			 ....
			 Σn=Σ(n-1) +n
			 
			 Σ1 = 1;
			 * */
			/**
			 * 求Σn的和
			 * @param {Object} n
			 */
			function sum(n){
				if(n==1){
					return 1;
				}
				return sum(n-1)+n;
			};
			
			var s100 = sum(100);
			alert(s100);
		</script>

8、汉诺塔

<script>
			/*
			 * n:汉诺塔
			 * 1.头:
			 * 	n==1
			 * 2.体:
			 * 	前n-1:从开始--》临时
			 * 	n:从开始--》目标
			 * 	前n-1:从临时--》目标
			 */
			/**
			 * n层汉诺塔移动攻略
			 * @param {Object} n:层
			 * @param {Object} a:开始
			 * @param {Object} b:临时
			 * @param {Object} c:目标
			 */
			var count = 0;
			function hanoi(n,a='A',b='B',c='C'){
				
				if(n==1){
					count++;
					console.log(count+"次:"+n+":"+a+"-->"+c);
					return ;
				}
				hanoi(n-1,a,c,b);
				count++;
				console.log(count+"次:"+n+":"+a+"-->"+c);
				hanoi(n-1,b,a,c);
				
			};
			hanoi(3);
			console.log(count);
		</script>

9、7个台阶

<script>
			/*
			 * 七个台阶:
			 * 	第一步:
			 * 		1: + 6
			 * 		2:+5
			 *  6:
			 * 		第二步:
			 * 			1:5
			 * 			2:4
			 * 5:
			 * f(n)=f(n-1)+f(n-2)   (n>2)
			 * 		
			 * f(7)=f(6)+f(5);
			 * f(6)=f(5)+f(4);
			 * f(5)= f(4)+f(3);
			 * 头:
			 * f(1)=1
			 * f(2)=2;
			 */
			function step(n){
				if(n==1){
					return 1;
				}else if(n==2){
					return 2;
				}
				return step(n-1)+step(n-2);
			};
			
			console.log(step(7));
		</script>

10、创建追加节点

<script>
			var container = document.getElementById("container");
			
			/*1.向container追加一个p标签,内容为我是一个段落*/
			var p = document.createElement("p");
			var txt = document.createTextNode("我是一个段落");
			p.appendChild(txt);
			container.appendChild(p);
			/*2.向cotainer追加一个span,内容为我是span*/
			var span = document.createElement("span");
			var txt2 = document.createTextNode("我是span");
			//关联
			span.appendChild(txt2);
			//span与container
			container.appendChild(span);
			
			//3.div
			var div = document.createElement("div");
			div.innerHTML="我是div";
			container.append(div);
			//为div添加id属性
			div.setAttribute("id","dv");
			console.log(div.getAttribute("id"));
			//设置title属性
			div.title="我是title";
			console.log(div.getAttribute('title'));
			//设置class属性,设置className
			div.className="cls";
			console.log(div.className);
			
			div.setAttribute("class",div.getAttribute('class')+"  cls2");
		</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值