<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test</title> </head> <body> <script> /* 函数第一种声明 */ var abc; abc = function (a, b) { alert(a + b); } abc(1, 3); /* 函数第二种声明 */ var c = 5, d = 6; test(c, d); function test(c, d) { alert(c + d); } /* 在js的函数里面还可以定义函数(私有函数) */ function testaaa() { var res = add(2, 2); function add(a, b) { return a + b; } return res; } alert(testaaa()); /* 匿名函数第一种用法 赋值给变量,赋值给对象的属性 */ var abc; abc = function (a, b) { alert(a + b); } abc(1, 3); /* 匿名函数第二种用法 作为参数传入函数,类似回调函数 */ function test(a, b, f) { return f(a, b); } function add(a, b) { return a + b; } alert(test(2, 3, function (a, b) { return a + b; })); /* 匿名函数第三种用法 作为命名空间,定义完后直接调用 */ /* 匿名函数第一种调用方法 */ !function () { function a() { alert("我是a函数!"); } function b() { } function c() { } a(); }(); /* 匿名函数第二种调用方法 */ (function () { function a() { alert("我是a函数!"); } function b() { alert("我是b函数!"); } function c() { } b(); })(); /* 匿名函数第三种调用方法 */ (function () { function a() { alert("我是a函数!"); } function b() { alert("我是b函数!"); } function c() { alert("我是c函数!"); } c(); }()); /* 匿名函数的传参 */ !function (a, b) { alert(a + b); }(2, 4); /* 在外部间接调用私有属性和函数的第一种方法 */ 返回一个函数 var md5 = function () { function a() { alert("我是a函数!"); } function b() { alert("我是b函数!") } function c() { alert("我是c函数!") } return a; }(); md5(); /* 返回多个接口 */ var md5 = function () { function a() { alert("我是a函数!"); } function b() { alert("我是b函数!") } function c() { alert("我是c函数!") } return { a : a, b : b, c : c }; }(); md5.a(); md5.b(); /* 在外部间接调用私有属性和函数的第二种方法 */ var obj = {}; !function () { function a() { alert("我是a函数!"); } function b() { alert("我是b函数!") } function c() { alert("我是c函数!") } obj.a = a; obj.b = b; obj.c = c; }(); obj.a(); obj.b(); /* 在外部间接调用私有属性和函数的第三种方法(1) */ !function () { function a() { alert("我是a函数!"); } function b() { alert("我是b函数!") } function c() { alert("我是c函数!") } window.a = a; window.b = b; window.c = c; }(); a(); c(); /* 在外部间接调用私有属性和函数的第三种方法(2) */ !function (w) { function a() { alert("我是a函数!"); } function b() { alert("我是b函数!") } function c() { alert("我是c函数!") } w.a = a; w.b = b; w.c = c; }(window); c(); /* js当中没有函数重载 */ /* js支持可变参数 */ function test() { alert(arguments.length); } test(1, 2); function test() { alert(arguments[1]); } test(1, 3); // 在顶层代码引用this 就代表Window ,函数里的this,谁调用它,就代表谁 var a = 100; alert(this.a); var a = 200; function test() { var a = 100; alert(this.a); } window.test(); var x = 2000; var obj1 = { x : 1000, y : function () { alert(this.x); } }; var obj2 = { x : 3000, y : function () { alert(this.x); } }; alert(this.x); obj1.y(); obj2.y(); // ECMAScript规范所有函数都包含两个非继承的方法,分别为call()和apply(),这两个函数都是在特定的作用域中调用函数,能改变函数的作用域,实际上是改变函数体内“this”的指代的对象。 /* 函数也是对象,它也有属性和方法,最常用的方法是call 和 apply */ function test(a, b) { alert(a + b); alert(this.x); } var obj1 = { x : 1000, y : function () { alert(this.x); } }; var obj2 = { x : 3000, y : function () { alert(this.x); } }; // call 方法有好几个参数,第一个是对象,剩下的都是传给这个函数的参数 // test.call(obj1); test.call(obj2, "张三", "李四"); // apply 只有两个参数,第一个是对象,第二个是数组 test.apply(obj1, ["张三", "王五"]); // 闭包 function test() { var a = 100; return function () { return a; } } var abc = alert(test()()); </script> </body> </html>
需要注意的是 Javascript 里面没有函数重载。