函数是JS中的第一类对象,可以保存在变量中,可以有属性,,可以作为参数传给调用函数。
函数的重要特性,是一个对象。
声明函数
//声明函数
function prison(){}
变量保存函数
//变量保存函数
var prison = function prison(){}
在这个时候,我们也可以使用匿名函数,以便减少冗余,减少名字不匹配的几率。
匿名函数
使用局部变量保存匿名函数,调用方式与普通函数是相同的
var prison = function () {}
prison()
自执行的匿名函数
前提:在全局作用域定义得到所有东西在每个地方都是可用的。不想和所有人共享,不想第三方库共享他们的内部变量,因为这很容易覆盖对方的库,从而导致很难诊断的问题。
显式调用 | 自执行函数 |
显式调用,将整个程序封装到函数中,可以完成外部代码不能访问内部变量的要求。
function foo(){
console.log('foo');
};
foo();
但是这种方式,有个缺点就是冗长而且不灵活。自执行匿名函数可以解决这一缺点。
(function (){
console.log('foo');
})();
仅仅只用将函数用括号括起来,后面再跟上一个括号用于执行。
作用:被用来控制变量的作用域,阻止变量泄漏到代码中的其他地方。可以解决全局变量被第三方库或者甚至是自己无意编写的代码所覆盖的问题。
模块模式
定义私有变量和私有方法。
将一个庞大的文件,分成一个一个的模块,在模块中,都有自己的私有变量,仍然使用自执行匿名函数来控制变量的作用域。
注意一点,在稍大一点的模块中,要减少全局变量。
闭包
闭包是阻止立即回收器将变量从内存中移除的方法,使得在创建变量的执行环境的外面能够访问到该变量。
闭包的使用情况:
1.保护函数
2.保存变量,以便在Ajax请求返回时使用。