函数定义 1 2 3 4 // 函数声明 关键字function 函数名 参数 function functionName (arg0, arg1, arg2) { // 函数体 };
函数声明,特性:函数声明提升,就是说执行代码之前会先读取函数声明。举个例子
1 2 3 4 5 6 // 调用函数 sayHi(); // 定义函数 function sayHi(){ };
1 2 // 函数表达式 var functuinName = function(arg0, arg1, arg2) {}
递归 递归函数是在函数通过名字调用自身的情况下构成的。
1 2 3 4 5 6 7 function factorial(num){ if (num <= 1) { return 1; } else { return num * factorial(num - 1); } }
闭包 JavaScript 变量可以是局部变量或全局变量。 私有变量可以用到闭包。
1 2 3 4 5 6 function createFunction (name){ return function(object1) { var value1 = object1(name) alert(value1) } }
this对象 this对象是运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象的方法调用时,this等于那个对象。
1 2 3 4 5 6 7 8 9 10 11 12 var name = "The Window"; var object = { name: "My object", getNameFunc: function() { var that = this; // 将getNameFunc()的this保存在that变量中 var age = 15; return function() { return that.name; }; } } alert(object.getNameFunc()()); // "My object"
内存泄漏 闭包中引用变量消除循环引用 把element变量设置为null,这样能够解除对DOM对象的引用,顺利地减少其引用数,确保正常回收其占用的内存。 模仿块级作用域 1 2 3 4 5 6 7 (function(){ for (var i = 0; i < count; i++) { alert(i) } var i; alert(i) })();
私有变量 特权方法,有权访问私有变量和私有函数的公有方法称为特权方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 function MyObject(){ // 私有变量和私有函数 var privateVariable = 10; function privateFunction () { return false; } // 特权方法 this.publicMethod = function () { privateVariable++; return privateFunction(); } }
静态私有变量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 (function(){ // 私有变量和私有函数 var privateVariable = 10; function privateFunction () { return false; } // 特权方法 this.publicMethod = function () { privateVariable++; return privateFunction(); } })()
模块模式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var singleton = function () { // 私有变量和私有函数 var privateVariable = 10; function privateFunction(){} var object = new CustomType() // 添加特权方法/公有属性和方法 object.publicProperty = true; object.publicMethod = function () { privateVariable++; return privateFunction(); } return object }();
任何值得做的事就值得把它做好。- Whatever is worth doing is worth doing well.