浏览 1927 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-13
一个函数是可以被不断调用,运行的JavaScript代码块。 一个被对象调用的函数成为方法 定义和调用函数 一个函数有:函数名,一个或多个参数名和用大括号组织起来的语句 定义函数的例子: //返回undefined function print(msg) { document.write(msg, "<br>"); } // 计算并返回 function distance(x1, y1, x2, y2) { var dx = x2 - x1; var dy = y2 - y1; return Math.sqrt(dx*dx + dy*dy); } // 递归 function factorial(x) { if (x <= 1) return 1; return x * factorial(x-1); } 当函数定义后,可以用()操作符来调用 print("The probability of that is: " + factorial(5)/factorial(13)); 8.1.1 内函数 Javascript可以内置函数 function hypotenuse(a, b) { function square(x) { return x*x; } return Math.sqrt(square(a) + square(b)); } 因为函数和类一样都是一等公民,Scala也允许有内函数 8.1.2 Function Literals Javascript允许函数定义为:function literals. function f(x) { return x*x; } // function statement var f = function(x) { return x*x; }; // function literal 同样Scala也有这个特性 8.2 函数参数 Javscript可以把函数当成参数进行传递。因为函数是松类型(loosely typed),所以可以传递任何类型的参数值给任何函数。 可选参数 如果传入的参数数量少于需要的数量,那么剩下的参数值都为undefined 如:定义函数拷贝,如果参数a没有传入那么创建一个空数组 function copyPropertyNamesToArray(o, /* optional */ a) { if (!a) a = []; // If undefined or null, use a blank array for(var property in o) a.push(property); return a; } 调用该函数: var a = copyPropertyNamesToArray(o); // 将o的值拷贝给新的数组 copyPropertyNamesToArray(p,a); // 将p的值拷贝给数组a 8.2.2 可变参数列表:参数对象 Javascript可以侦测函数传入参数的数量 function f(x, y, z) { // 访问arguments对象判断读入的参数长度 if (arguments.length != 3) { throw new Error("function f called with " + arguments.length + "arguments, but it expects 3 arguments."); } // Now do the actual function... } Javascript把传入的参数都放在可变的对象arguments中,因此可以传入不定长的参数列表 function max(/* ... */) { var m = Number.NEGATIVE_INFINITY; // 循环便利参数 looking for, and // 记录最大的值 for(var i = 0; i < arguments.length; i++) if (arguments[i] > m) m = arguments[i]; // 返回最大值 return m; } var largest = max(1, 10, 100, 2, 3, 1000, 4, 5, 10000, 6); Javascript不是强类型定义,如果需要确定的类型参数,可以使用类似的判断: if ((a instanceof Array) || // if array (a && typeof a == "object" && "length" in a)) { // or array like } 8.3 函数作为数值 Javascript中可以将函数当作数在传递,存储和使用 比如定义一个函数: function square(x) { return x*x; } 然后可以: var a = square(4); // a存了16 var b = square; // b存储了square这个方法! var c = b(5); // c存了25 8.4 函数作为方法 当函数在对象中被调用的时候成为方法 var calculator = { // 定义一个对象 operand1: 1, operand2: 1, compute: function() { this.result = this.operand1 + this.operand2; } }; calculator.compute(); // 调用方法compute() print(calculator.result); // 打印结果 8.6.4 ECMAScript有两个特殊的方法call()和apply() 假设有对象o和函数f f.call(o, 1, 2); 就等同于 o.m = f; o.m(1,2); delete o.m; appy()和call很类似,只是要用数组传值 f.apply(o, [1,2]); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |