当前位置: 代码迷 >> Web前端 >> 八 Function
  详细解决方案

八 Function

热度:466   发布时间:2012-11-22 00:16:41.0
8 Function

1. arguments

?

在函数内部,arguments表示传入进来的参数,是个类似数组的Object。

?

		function add(x, y, z) {
			if (arguments.length != 3) {
				throw new Error("f should called with 3 arguments!");
			}                                                        
			return x + y + z;
		}           
		
		function max(/* ... */) {
			var rst = Number.NEGATIVE_INFINITY;
			for (var i = 0 ; i < arguments.length; ++i) {
				if (arguments[i] > rst) {
					rst = arguments[i];
				}
			}                          
			return rst;
		}         
		     
	    var f = function(x) {if (x <= 1) return 1; else return x * arguments.callee(x-1);}
		document.write("1 + 2 + 3 = " + add(1, 2, 3) + "<br>");
		//! document.write("1 + 2 = " + add(1, 2) + "<br>"); //throws Error 
		document.write("the max of 1, -10, -100, 2000, 5000, -10000 is "
		               + max(1, -10, -100, 2000, 5000, -10000) + "<br>"
		               );                                                                    
		document.write("4! = " + f(4) + "<br>");           

?

?

2. Javascript对待function其实和数据是一样的。

?

function add(x,y) {return x + y;}
		function sub(x,y) {return x - y;}
		function mul(x,y) {return x * y;}
		function div(x,y) {return x / y;}
		
		function operate(operator, op1, op2) {
			return operator(op1, op2);
		}                             
		                                                              
		// i = (2 + 3) + (4 x 5)
		var i = operate(add, operate(add, 2, 3), operate(mul, 4, 5));   
		document.write("(2 + 3) + (4 x 5) = " + i + "<br>");     
?

?

3. 可以把一个function当作data赋值给一个object,这时这个function就是这个object的方法。

并且可以使用关键字this

?

 var calculator = new Object();
		calculator.op1 = 1;
		calculator.op2 = 2;
		calculator.op = function() {
			this.result = this.op1 + this.op2;
		}                                     
		calculator.op();
		document.write("1 + 2 = " + calculator.result + "<br>"); 
?

?

4. length 和 callee两个属性

?

function check(args) {
			if (args.length != args.callee.length) {
				throw new Error("Wrong number of arguments!!!");
			}
		}    
		function add1(x, y, z) {
			return x + y + z;
		}                                                   
		function add2(x, y, z) {
			check(arguments);
			return x + y + z;
		}                    
		document.write(add1("I", " love", " you!") + "<br>");
		document.write(add1("I", " love") + "<br>");
		document.write(add2("I", " love", " you!") + "<br>");
		document.write(add2("I", " love") + "<br>");                
?

?

5. call()和apply两个方法

?

 function foo(x) {
    	document.write(x + "<br>");
}    
foo(10);                          
foo.call(null,10); 
?

?

6. closure

?

7. Function -- 作用域是不太一样的

?

var y = "global";
function constructFunction() {
    var y = "local";
    return new Function("return y");  // Does not capture the local scope!
}
// This line displays "global" because the function returned by the
// Function() constructor does not use the local scope. Had a function
// literal been used instead, this line would have displayed "local".
alert(constructFunction()());  // Displays "global"
?
  相关解决方案