您的位置:首页 > Web前端 > JavaScript

JavaScript_个人笔记8_js的闭包closure

2015-04-12 18:10 302 查看
拥有多个变量,并且同时绑定这些变量环境的表达式,一般为函数,这个就是比较正式的闭包的定义。

表现形式就是一个函数中定义的子函数有引用该函数中的变量,那么这个子函数就是一个闭包。

其实质就是因为有引用关系,同时该闭包未释放(没有被垃圾回收机制回收,那么内存中必须保证被引用对象的值或者状态)。

而为了理解闭包的一个关键其实是理解清楚js对象的作用域链:

1)js里面一切皆对象,在对象里面都有一个关键字this引用本身,函数也不例外。

var name = "Outer name.";
var obj = {
name: "inner thing.",
getNameFunc: function(){
return function(){
return this.name;
}
}
}
alert(obj.getNameFunc()());


这个js片段比较有意思:

1 obj对象包含两个属性,name, getNameFunc,两者用逗号隔开,而非用分号,这一点很重要!

2 getNameFunc的实现是返回一个函数 retFunc

3 这个问题的关键是this,由于retFunc是一个匿名函数,同时它是一个对象,那么this就是指带这个对象,很显然,这个对象里面并没有定义name,也就是在本地找不到,转向全局,正好外部有一个name,且初始值是Outer name,那么结果就是它了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: