用JS(包括Jquery)有一段时间了,但是对于闭包啥的一直没仔细研究过。闭包是JS中对于初学者而言,一个较难的知识点。
以下是我从网上学习到的,我把它写出来,一方面分享给大家,有啥不对的见解还望指出;另一让面也是记录自己的学习过程。
作用域
要理解闭包,首先是作用域问题。
JS的function中可以读取全局变量,如以下代码:
var n = 1; function f1(){ alert(n); } f1(); // 1
但是,无法从function外部获取内部的局部变量,如以下代码:
function f1(){ var n = 1; } alert(n); // error, can't get variable n
有些情况下,我们还是需要从外部获取函数中的局部变量,这式就需要使用闭包。考虑如下代码:
function makeFunc() { var name = "Mozilla"; function displayName() { alert(name); } return displayName; } var myFunc = makeFunc(); myFunc();
myFunc()执行后,浏览器将弹出"Mozilla"。
但是,从“常理”来考虑,
var myFunc = makeFunc();
这句代码将返回displayName这个函数,然而makeFunc()方法已经执行完毕,应当无法获取name变量的值了!但事实相反,很明显,代码不是按照“常理”在运行。
这里,myFunc已经成为一个闭包。
闭包
闭包是一个特殊的函数,这个函数含有上下文环境。
它有两个作用:1,可以读取函数内部的变量;2,让这些捏不变量保持在内存中。