闭包
来源:互联网 发布:莉莉柯林斯长相知乎 编辑:程序博客网 时间:2024/05/25 01:36
/* 当在函数内部定义了其他函数时,就创建了闭包。闭包有权访问包含函数内部的所有变量,原理如下: * 在后台执行环境中,闭包的作用域链包含着它自己的作用域、包含函数的作用域和全局作用域 * 通常,函数的作用域及其所有变量都会在函数执行结束后被销毁 * 但是,当函数返回了一个闭包时,这个函数的作用域将会一直在内存中保存到闭包不存在为止。*/ /*使用闭包可以在javascript中模仿块级作用域(js本身没有块级作用域的概念),要点如下: * 创建并立即调用一个函数,这样既可以执行其中的代码,又不会在内存中留下对改函数的引用。 * 结果就是函数内部的所有变量都会被立即销毁--除非将某些变量赋值给了包含作用域(即外部作用域)中的变量*/ var name = "The Window"; var object = { name:"My Object", getNameFunc:function(){ console.log(this);//object return function () { console.log(this);//window return this.name; } } } console.log(object.getNameFunc());//function(){console.log(this);return this.name;} console.log(object.getNameFunc()());//The Window var name = "The Window"; var object = { name:"My Object", getNameFunc:function(){ var that = this; console.log(that);//object return function () { console.log(that);//object return that.name; } } } console.log(object.getNameFunc()());//My Object /*javascript中的函数表达式和闭包都是及其有用的特性,利用他们可以实现很多功能。不过,因为创建闭包必须维护额外的作用域,所以过度使用他们可能会占用大量的内存*/ function assignHandler(){ var element = document.getElementById("someElement"); element.onclick = function () { alert(element.id); } } function assignHandler(){ var element = document.getElementById("someElement"); var id = element.id; element.onclick = function () { alert(id); } element = null; }
阅读全文
1 0
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 闭包
- 线程和socke
- 开始PHP的学习!
- ArrayList和LinkedList的简单实现
- Objective
- Scala之类型参数化:Type Parameterization
- 闭包
- 网页版2048实战--简介及构建页面
- Linux yum安装包的更新列表
- python实现动态规划求解给定矩阵的和最大的子数组(矩阵中数字正负均存在)
- 一篇文章看明白 HTTP,HTTPS,SSL/TSL 之间的关系
- spring源码(7)alias标签的解析
- 关于UGUI的个人优化总结
- Mac下git通过SSH连接本地服务器
- 同步、异步与阻塞和非阻塞