首页 > 作文

让我们一起来学习一下什么是javascript的闭包

更新时间:2023-04-04 18:55:14 阅读: 评论:0

目录
一、常见的闭包二、实例详解总结
什么是闭包:闭包是一个存在内部函数的引用关系。该引用指向的是外部函数的局部变量对象(前提是内部函数使用了外部函数的局部变量)国际国内新闻闭包的作用:延长外部函数变量对象的生命周期使用闭包能够间接的从函数外部访问函数内部的私有变量

一、常见的闭包

function outer() {  var a = 1  function inner() {    console.log(a)    //1  }  inner()}outer()

二、实例详解

function createfunc() {  var result = new array()  for (var i = 0; i < 10; i++) {    result[i] = function () {      console.log(i)    }  }  return result}var result = createfunc()result[0]() //10result[1]() //10result[2]() //10result[3]() //10result[4]() //10result[5]() //10result[6]() //10result[7]() //10

首先在代码执行前,会先创建一个全局的对象,其中包含着全局的属性,并且将其放入全局上下文作用域链顶端,并且也将其放入每一个函数的作用域链顶商业会计端。以这个例子为例。如图所示

在初始化结束后,开始执行代码,此时就会创建一个新的对象,叫做active object,其中放入一些参数,并且将其压入createfunc函数的作用域链中。

因为在createfunc中仍然定义函数result[i]..,所以在执行代码前,该函数会形成作用域链。

此时开始执行createfunc函数,当指向完毕后,createfunc中的作用域链表现为。如下图所示。此时result为一个数组。并且active object已经从createfunc作用域链的顶部删除。

此时开始执行result[0](这里以result[0]为例,其他的一样),此时执行result[0]之前,应该创建一个新的active object对象,将其放入result[0]执行作用域栈中。如图所示

此时函数执行中需要访问i,但是在active object并不存在i,所以此时需要沿着作用域链进行查找,在createfunc中找到i,并且i的值为10,所以最终打印的值都是10。在createfunc执行完毕后,其创建的对象并没有被垃圾回收掉,因为在result[0]中的i依然保持对该对象的引用。

这个例子的解决方法如下所示,就是设置一个立即执行函数,每一个下标对应的函数,都是立即执行函数,当立即执行函数执行时,每一个函数的上下文对象中都会存在为正确的下标值。

function createfunc() {  var result = new array()  for (var i = 0; i < 10; i++) {    re2021高考sult[i] = (function (num) {      return function() {        console.log(num)      }    })(i)  }  return result}var result = createfunc()result[0]() //0result[1]() //1result[2]() //2result[3]() //3result[4]() //4result[5]() //5resul鸡蛋撞地球t[6]() //6result[7]() //7高云翔个人资料

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注www.887551.com的更多内容!

本文发布于:2023-04-04 18:55:12,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/3b0e2d2b578808a33d4d2ec0d3783999.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:让我们一起来学习一下什么是javascript的闭包.doc

本文 PDF 下载地址:让我们一起来学习一下什么是javascript的闭包.pdf

标签:函数   作用   对象   将其
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图