闭包(一)
来源:互联网 发布:品茗软件怎么用 编辑:程序博客网 时间:2024/05/05 09:43
闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的常见方式就是在一个函数内部创建另一个函数。
如要了解闭包,就需要了解作用域链,作用域链本质上是一个指向变量对象的指针列表,它只引用,但不实际包含变量对象。
function createFunctions(){var result = new Array();for (var i = 0; i < 10; i++){result[i] = function(){return i;};}return result;}var resultarr = createFunctions()上面例子中,result数组的每一项都是一个匿名函数,当createFunctions()函数在执行完毕后,其活动对象也不会被销毁,因为匿名函数的作用域链仍然在引用这个活动对象。换句话说,createFuctions()函数返回后,其执行环境的作用域链会被销毁,但它的活动对象仍然会留在内存中,直到匿名函数被销毁后,createFunctions()的活动对象才会被销毁。如下例,匿名函数仍然能访问到其包含函数中变量i的值。
console.log(resultarr[1]);//function(){return i;}console.log(resultarr[1]())//10但是在上例中,resultarr[1[()的值是10,而不是我们所期望的1。因为如前面所说,result数组中的每一项都是一个匿名函数,而这些匿名函数的作用域链其本质只是一个指针,不实际包含变量对象。所以,在createFunctions()函数中循环完毕后,i就已经被赋值为10,所以,数组中的每一项匿名函数被调用时,其函数中的i也都指向变量i,即10;要解决这个问题只需在为result[i]赋值匿名函数时,直接调用此匿名函数即可
function createFunctions(){var result = new Array();for (var i = 0; i < 10; i++){result[i] = function(){return i;}();}return result;}var resultarr = createFunctions()
阅读全文
0 0
- 闭包(一)
- 闭包(一)
- javascript (一)闭包
- 理解闭包(一)
- 理解闭包(一)
- 深入理解javascript闭包(一)
- javascript 中的闭包(一)
- 深入理解javascript闭包(一)
- 深入理解javascript闭包(一)
- JS笔记(一)闭包
- JavaScript闭包讨论(一)
- javascript闭包入门理解(一)
- 一、什么是闭包?
- js闭包(一)
- atomic 包(一)
- 一、闭包的定义。
- Lua集锦一 闭包
- java.util包(一)
- 第10章scroll家族
- 三种简单的html网页自动跳转方法
- 前端项目开发流程
- 在507干活的第4天(上)
- 请求转发(forward)和重定向(redirect)的区别
- 闭包(一)
- MySQL性能优化的最佳21条经验
- ElasticSearch-分页查询
- 关于jqgrid使用记录
- Java异常概述
- C2000 进入低功耗所需的配置
- 关于python编码和magic变量和函数
- 反射如何破坏单例模式
- jQuery.ready()函数仿写,与window.onload的区别