闭包
2016-01-26 11:38
204 查看
闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。当一个函数初始化的时候会把他的执行上下文记录在内部变量[[scope]]里,当函数被调用时,一个新的执行上下文对象产生,先复制他的scope,然后把目前的上下文塞进去。
使用闭包很多时候是为了保留特定的执行上下文。
var myobject = (function() {
var value = 0;
return {
setValue: function(x) {
value += x;
},
getValue: function() {
return value;
}
}
})();
注意最后一行的 () ,
并不是将一个函数赋给myobject ,而是将调用该函数后的返回的对象赋值给它。
在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
拓展scope chain
with,和catch可以拓展作用域链scope chain,也就是在这两个表达式的代码里会产生various object,但是比较特别:
function buildUrl() {
var qs = “?debug=true”;
with(location){
var url = href + qs;
}
return url; //这里在with块外面,但是仍然保留了URL变量,所以说是扩张
}
使用闭包很多时候是为了保留特定的执行上下文。
var myobject = (function() {
var value = 0;
return {
setValue: function(x) {
value += x;
},
getValue: function() {
return value;
}
}
})();
注意最后一行的 () ,
并不是将一个函数赋给myobject ,而是将调用该函数后的返回的对象赋值给它。
在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
拓展scope chain
with,和catch可以拓展作用域链scope chain,也就是在这两个表达式的代码里会产生various object,但是比较特别:
function buildUrl() {
var qs = “?debug=true”;
with(location){
var url = href + qs;
}
return url; //这里在with块外面,但是仍然保留了URL变量,所以说是扩张
}
相关文章推荐
- 英文记录
- Auto refresh images in HTML
- Amzon MWS API开发之订单接口
- javascript 备忘 细节 相关
- 十进制转化为二进制
- JS组件Bootstrap Select2使用方法详解
- android 在drawable描边只描一边
- error LNK2005: _DllMain@12 already defined in LIBCMTD.lib(dllmain.obj) 解决方案
- Genymotion shell 命令行
- SpringMVC深度探险(二) —— SpringMVC概览
- 半年之殇:困扰半年的MSP430的I2C总线问题在今天解决,发文总结
- 如何强制视频横竖屏
- 网上图书商城项目学习笔记-008修改密码功能
- div+css将同一个div中图标和文字对齐
- SQL增加、删除、更改表中的字段名
- 那2000万的数据
- Python导入第三方模块后eclipse提示unresolved import
- VS版本记录、_MSC_VER记录
- 对spark中RDD的理解
- Terrier文档翻译:概述