代码改变世界

javascript学习(3)——[基础回顾]函数

2013-11-16 14:47  低调de草原狼  阅读(183)  评论(0编辑  收藏  举报

简单说下鄙人对js函数的理解,如果只是简简单单的说下函数的话,我想其实并不是特别困难的,但是要是细细的围绕着函数等一系列的周边来说的话,那么真的需要一点时间和精力了,当然本次属于基础回顾,也就简单的说下函数的基本应用了。

我还是想简单的贴几段代码来说明下函数的基本用法,毕竟本次博客是用来说明javascript的高级应用之设计模式的,所以如果有什么不懂得地方,大家可以自己百科了。

/**
 * 函数
 */
(function(){
//	function 函数名字(val1,val12,val3,valn){
//		//代码
//		//return
//	}
//	var fn = function(){
//		//代码
//	}
	//2中函数声明的区别
	/**
	 * var abc = function(){}
	 * 只能在函数声明后才能使用
	 */
	//add(1,1);
	function add(x,y){
		alert(x+y)
	}
	//add(1,2);
	//add2(12,3)
	var add2 = function(x,y){
		alert(x+y)
	}
	add2(12,3)
})()

/**
 * 回调函数
 * 调用一个函数之后,又会再调用本身传入的一个函数
 */
(function(){
	//接收回调函数的函数
	function add(x,y,fn){
		this.x = x||1;
		this.y = y||1;
		if(fn){
			fn(this.x+this.y);
		}
	}
	add(1,2,function(v){
		if(v>0){
			alert("re > 0")
		}else{
			alert("re <= 0")
		}
	})
})()

/**
 * 函数传参
 */
(function(){
	//1.参数传递的随意性
	function add(x,y,z){
		this.x = x||0;
		this.y = y||0;
		this.z = z||0;
		alert(this.x+this.y+this.z)
	}
	//add(12,3,5)
	//add(14,5)
	//弊端 : 无法像java等高级语言那有 有函数精确复写的特性
	//技巧 : 如果你这个类是工具类的情况下,那没你接收的参数最好是对象
	/**
	 * conf = {gridName:"",gridCode:"",gridSize:""}
	 */
	function gridUtil(conf){
		alert(conf["gridName"]+" "+conf["gridSize"]);
	}
	gridUtil({gridName:"YUNFENGCHENG",gridSize:10});
	//传值还是传址
	var i = 100;
	var s = "one";
	function add3(i,s){
		i++;
		s+="--";
		//alert(i);
	}
	//add3(i,s);
	//alert(i);//100 or 101
	//alert(s);//"one" or one--
	/**
	 * 证明 : 基础变量是传递数值的
	 * 自定义对的传参方式是传得"地址"
	 */
	//对象
	var o = {name:"YUNFENGCHENG"}
	function change(o){
		o["name"] = "USPCAT.COM"
	}
	change(o);
	alert(o.name)
})()

/**
 * 函数递归
 */
(function(){
	//常见的编程题 1~100 用递归算法完成累加
	function add(start,end){
		var num = 0;
		num = num + start;
		if(start < end){
			num = num + add(start+1,end);
		}
		return num;
	}
	
	alert(add(1,100));
})()

/**
 * 函数使用技巧
 */
(function(){
	//代理函数-->用程序来决定返回的新的函数(他是一个生产函数的函数)
	//模拟数据库
	var person = {"jim":"m","lili":"w"}
	var test = function(name){
		if(person[name] == "m"){
		
			/**
			 * 内科,外科
			 */
			return function(nk, wk){
				alert(nk+"  "+wk)
			}
			
		}else if(person[name] == "w"){
			/**
			 * 内科,外科,妇科
			 */
			return function(nk, wk, fk){
				alert(nk+"  "+wk+" "+fk)
			}			
		}
	}
	test("jim")("ok","ok")
	test("lili")("ok","ok","no")
})()

简单介绍下一个功能强大的函数eval

(function(){
	//eval 他是把一个字符串解析成一个方法并且调用
	var str = "var show = function(){alert(100)}()";
	//eval(str)
	//数据库会返回一个字符串(长得像javaScrpit数组)
	var a = "[1,2]";
	var array = eval(a);
	for (var i = 0; i < array.length; i++) {
		alert(array[i])
	}
})()