JavaScript(2):函数

 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>
原文地址:https://www.cnblogs.com/storml/p/7507554.html