闭包是什么?
闭包就是有权访问另一个函数作用域的变量的函数。
作用域:
function foo (){
var a = '大象’;
}
console.log(a); // a is not defined
函数有函数自己的作用域,那么闭包就是如下:
function foo (){
var a = '大象';
function get (){
return a;
}
return get;
}
var getName = foo();
console.log(getName());//大象
函数 get()获取到 a变量 就是形成闭包。
通过foo的return 返回赋值给getName;调用getName()就能拿到a变量了;
这有什么好处?
a变量是存在在foo函数作用域内的,可以叫局部变量,也可以叫私有变量。
这样子的话在就避免污染了window中的全局变量,私有变量不能随意改变;
假设一个jquery中的闭包例子:
(function(document){
var doc = document;
var obj = {
getId:function(name){
return doc.getElementById(name);
}
}
window.JQuery = window.$ = obj;
})(document)
var doc就是立即执行函数中的私有变量,通过obj中的getId函数访问到,并且return返回;
那么doc是安全的,只能在内部改变。
网友评论