【javascript】详解javascript闭包 — 大家准备好瓜子,我要开始讲故事啦~~
闭包的概念
function outerFunction () {
var a =
return function () {
console.log(a);
}
}
var innerFunction = outerFunction();
innerFunction();
谈谈函数执行环境,作用域链以及变量对象
ExecutionContext = {
variableObject: { .... },
this: thisValue,
Scope: [ // Scope chain
// 所有变量对象的列表
]
};
function foo (arg) {
var variable = ’我是变量‘;
function innerFoo () {
alert("我是彭湖湾")
}
}
foo('我是参数');
ExecutionContext = {
variableObject: {
variable:’我是变量‘
innerFoo: [对函数声明innerFoo的引用]
arg: '我是参数'
},
this: thisValue,
Scope: [ // Scope chain
// 所有变量对象的列表
]
};
function foo () {
var a = ;
function innerFoo () {
console.log(a)
}
innerFoo();
}
foo(); // 打印 1
InnerFooExecutionContext = {
variableObject: {
},
this: thisValue,
Scope: [ // Scope chain
innerFooExecutionContext. variableObject, // innerFoo的变量对象
FooExecutionContext.variableObject, // Foo的变量对象
globalContext.variableObject // 全局执行环境window的变量对象
]
};
FooExecutionContext = {
variableObject: {
a:
},
this: thisValue,
Scope: [ // Scope chain
FooExecutionContext.variableObject, // Foo的变量对象
globalContext.variableObject // 全局执行环境window的变量对象
]
};
闭包和函数柯里化
function foo (a) {
return function (b) {
return function (c) {
console.log(a + b + c);
}
}
}
foo('我')('叫')('彭湖湾'); // 打印 我叫彭湖湾
function foo (a) {
return function (b) {
return function (c) {
console.log(a + b + c);
}
}
}
var foo1 = foo('我');
var foo2 = foo1('叫');
foo2('彭湖湾'); // 打印 我叫彭湖湾
闭包造成的额外的内存占用 (注意我说的不是“内存泄漏”!)
function foo (a) {
return function () {
console.log(a)
}
}
var foo1 = foo();
var foo2 = foo();
var foo3 = foo();
foo1(); // 输出1
foo2(); // 输出2
foo3(); // 输出3
闭包只能取得包含函数的最后一个值
function createArray() {
var arr = new Array();
for (var i = ; i < ; i++) {
arr[i] = function () {
return i;
}
}
return arr;
}
var funcs = createArray();
for (var i = ; i < funcs.length; i++) {
document.write(funcs[i]() + "<br />");
}

【javascript】详解javascript闭包 — 大家准备好瓜子,我要开始讲故事啦~~的更多相关文章
- js对象详解(JavaScript对象深度剖析,深度理解js对象)
js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...
- 详解javascript中的this对象
详解javascript中的this对象 前言 Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象.Javascript可以通过一定的 ...
- 详解JavaScript调用栈、尾递归和手动优化
调用栈(Call Stack) 调用栈(Call Stack)是一个基本的计算机概念,这里引入一个概念:栈帧. 栈帧是指为一个函数调用单独分配的那部分栈空间. 当运行的程序从当前函数调用另外一个函数时 ...
- 详解javascript的类
前言 生活有度,人生添寿. 原文地址:详解javascript的类 博主博客地址:Damonare的个人博客 Javascript从当初的一个"弹窗语言",一步步发展成为现在前后端 ...
- 详解Javascript的继承实现(二)
上文<详解Javascript的继承实现>介绍了一个通用的继承库,基于该库,可以快速构建带继承关系和静态成员的javascript类,好使用也好理解,额外的好处是,如果所有类都用这种库来构 ...
- 【转】详解JavaScript中的this
ref:http://blog.jobbole.com/39305/ 来源:foocoder 详解JavaScript中的this JavaScript中的this总是让人迷惑,应该是js众所周知的坑 ...
- Day03 javascript详解
day03 js 详解 JavaScript的基础 JavaScript的变量 JavaScript的数据类型 JavaScript的语句 JavaScript的数组 JavaScript的函数 Ja ...
- 详解 javascript中offsetleft属性的用法(转)
详解 javascript中offsetleft属性的用法 转载 2015-11-11 投稿:mrr 我要评论 本章节通过代码实例介绍一下offsetleft属性的用法,需要的朋友可以做一 ...
- 详解JavaScript的任务、微任务、队列以及代码执行顺序
摘要: 理解JS的执行顺序. 作者:前端小智 原文:详解JavaScript的任务.微任务.队列以及代码执行顺序 思考下面 JavaScript 代码: console.log("scrip ...
- (转载)详解Javascript中prototype属性(推荐)
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
随机推荐
- C#内置函数 RunSql的使用
作用批量执行sql语句 表达式.RunSQL(SQLStatement,UseTransaction) 表达式.一个代表DoCmd对象的变量. 注释:sqlstatement参数的最大长度为 32,7 ...
- 基于Http协议订阅发布系统设计
基于Http协议订阅发布系统设计 --物联网系统架构设计 1,订阅发布(subscriber-publisher) 订阅发布模式最典型的应用场景就是消息系统的设计.在消息系统的架构中 ...
- PHP发送E-mail---新手教程
首先下载PHPmailer拓展包,其实就是别人封装好的类库,下载链接:http://pan.baidu.com/s/1slbhGo1 首先去163注册个账号,然后登陆进去,点击设置下面的 POP3/S ...
- 禁用Ubuntu 15.04登录界面显示客人会话
在控制台打开如下配置文件,如果没有就自己创建一个: sudo vi /etc/lightdm/lightdm.conf 向文件中添加如下内容: [SeatDefaults] greeter-sessi ...
- Akka(15): 持久化模式:AtLeastOnceDelivery-消息保证送达模式
消息保证送达是指消息发送方保证在任何情况下都会至少一次确定的消息送达.AtleastOnceDelivery是一个独立的trait,主要作用是对不确定已送达的消息进行补发,这是一种自动的操作,无需用户 ...
- 初次配置git与github出现push不了的问题
ssh: connect to host gmail.com port 22: No route to host fatal: Could not read from remote repositor ...
- jmeter之beanshell提取json数据
Jmeter BeanShell PostProcessor提取json数据 假设现有需求: 提取sample返回json数据中所有name字段对应的值,返回的json格式如下: {“body”:{“ ...
- HTML中关于图像和表格,链接等的知识
下面是我分享的html中关于图像和表格,链接等知识: ①<img/>图像标签 <img/>标签中的一些常见属性:1,src是图像的路径属性,是img标签中必不可少的属性. 2, ...
- iOS字典转模型MJExtension使用
如果项目是纯OC的建议使用,MJExtension是一套字典和模型之间互相转换的超轻量级框架,可以轻松完成: 字典(JSON) --> 模型(Model) 模型(Model) --> 字典 ...
- robot framework 怎么点击文本总结
点击文本有一下几种方式 1.