1 <!DOCTYPE html> 2 <html> 3 <body> 4 <p>JavaScript 函数</p> 5 <script> 6 // 函数声明 7 function myFunction(a, b) { return a * b;} 8 console.log(myFunction(2, 6)); 9 // 函数表达式(匿名函数) 10 var demo1 = function(a, b) {return a * b;}; 11 console.log(demo1(2, 5)); 12 // Function()构造函数 [F大写!] 13 var demo2 = new Function("a", "b", "return a * b"); 14 console.log(demo2(2, 4)); 15 // 自调用函数(匿名自我调用的函数) [添加两对括号!] 16 (function() { 17 console.log("Call myself."); 18 })(); 19 20 // 函数是对象 21 // 使用 typeof 操作符判断函数类型将返回 "function" 22 console.log(typeof demo1 == 'function'); 23 // toString() 方法将函数作为一个字符串返回 24 console.log(demo1.toString()); 25 26 // Arguments对象 27 // [例1]获取最大值 28 function myMax() { 29 var i, max = arguments[0]; 30 if(arguments.length < 2) return max; 31 for(i = 1; i < arguments.length; i++){ 32 if(arguments[i] > max) max = arguments[i]; 33 } 34 return max; 35 } 36 console.log(myMax(1, 3, 9, 5, 7)); 37 // [例2]统计所有数值的和 38 function mySum() { 39 var i, sum = 0; 40 for(i = 0; i < arguments.length; i++) sum += (arguments[i] = arguments[i] || 0); 41 return sum; 42 } 43 var undef; 44 console.log(mySum(1, 3, 5, 7, 9, null, undef)); 45 46 // 函数作为方法调用 47 var myObject = { 48 firstName: "Frank", 49 lastName: "Liu", 50 fullName: function() { return this.firstName + " " + this.lastName; } 51 } 52 console.log(myObject.fullName()); 53 54 // 构造函数调用函数 55 function demo3(arg1, arg2) { 56 this.firstName = arg1; 57 this.lastName = arg2; 58 } 59 var demo4 = new demo3("Frank", "Liu"); 60 console.log(demo4.firstName); 61 62 // call()和apply()是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身 63 // call则作为call的参数传入(从第二个参数开始) 64 var demo5 = myMax.call(demo5, 3, 1, 5 ,2); 65 console.log(demo5); 66 // apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入 67 var demo6 = myMax.apply(demo6, [3, 1, 6 ,2]); 68 console.log(demo6); 69 70 // JavaScript闭包 71 // 函数的特别之处在于可以创建一个独立的作用域,最内层的函数使用了counter变量,所以counter不会被销毁 72 var add = (function() { 73 var counter = 0; 74 return function() { return counter += 1; }; 75 })(); 76 console.log("Loop1: " + add()); // 1 77 console.log("Loop2: " + add()); // 2 78 console.log("Loop3: " + add()); // 3 79 </script> 80 </body> 81 </html>