JavaScript-闭包函数(理解)
程序员文章站
2022-05-14 12:08:24
JavaScript 闭包函数(理解) 关于闭包先了解函数执行环境,作用域链以及变量对象 在函数调用的时候,会创建一个函数的执行环境,这个执行环境有一个与之对象的变量对象和作用域链 变量对象和作用域链 上面这个例子只是返回了一个闭包函数,就调用了一次函数 ......
javascript-闭包函数(理解)
var foo = function (a) { return function inner () { console.log(a) } } var faa = foo(1) /* foocontext = { variableobejct:{ inner:[对函数声明inner的引用] arg:1 } this: thisvalue, scope:[ globalcontext.variableobject // 就是全局变量 ] } innercontext = { variableobejct:{ } this: thisvalue, scope:[ foocontext.variableobject // foo的变量 globalcontext.variableobject // 就是全局变量 ] } 这是你原文的一段话: 实际上,foo函数调用结束后, foo函数的变量对象并不会被立即销毁,而是只有当取得foo函数闭包的值的foo1, foo2, foo3调用结束, 这三个函数的变量对象和作用域链被销毁后, foo函数才算“完成任务”,这时,它才能被销毁。 我是不是可以这样理解: innercontext中的scope里还有对 foocontext.variableobject 的引用吧,所以此时foo是不会删除的,只有当inner这个闭包函数被调用完之后,inner这个作用域被删除之后,foocontext.variableobject没有其他被引用了,这时也就会删除掉foo的作用域 */
关于闭包先了解函数执行环境,作用域链以及变量对象
在函数调用的时候,会创建一个函数的执行环境,这个执行环境有一个与之对象的变量对象和作用域链
executioncontext = { variableobject: { .... }, this: thisvalue, scope: [ // scope chain // 所有变量对象的列表 ] };
变量对象和作用域链
var foo = function (a) { var name = "zhuyu" var inner = function () { console.log(a) } return inner } foo(222) // 上面这个函数调用的时候,它的执行环境的变量对象就是variableobject里的数据 // 它的作用域链就是scope里的数据 fooexectioncontext = { variableobject:{ name:"zhuyu", inner:[函数inner的引用], arg:222 } scope:[ fooexectioncontext.variableobject, gobleexectioncontext.variableobjet, ] }
上面这个例子只是返回了一个闭包函数,就调用了一次函数
上一篇: PHPMYADMIN 简明安装教程 推荐
下一篇: 分页按钮样式