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>