浅谈对Js闭包的理解
2020-12-13 01:51
标签:style blog class code java color 理解Js的闭包,首先让我们先看几个概念 执行环境(executive environment)每个函数都有自己的执行环境,匿名函数默认为全局环境。 作用域链(scope chain)子函数继承父函数,但是父函数不能引用子函数。 变量对象(variable object)分为全局变量对象,和局部变量对象,前者的生存在整个环境中,后者在生存在函数的执行环境下,就是说,执行函数时被创建,当函数执行完后被销毁。 怎么被销毁的啊?目前最常见的算法是当变量对象不再被引用时,便可回收内存。 但是,若是想在函数外部访问函数内部的变量,就要用的闭包。 例如下面的程序: 我们在函数外部访问到了,函数里面的变量“Garfield” 匿名函数为findCat()内部函数,继承其作用域链,能够找到变量cat。 作用域链:(优先级从0开始) 2
全局环境 变量对象: cat = “Hello Kitty” 1
findCat()环境 变量对象:cat = “Garfield” 0
匿名函数 变量对象:无 变量对象不是在函数findCat执行完就已经被敲毁了嘛? 但是,我们在执行完findCat后,只是销毁了作用域链,(作用域链就是一个指向变量对象的指针),当活动对象被引用的次数为0就会被销毁,但是不要忘了,我们的匿名函数继承了父函数的作用域链,在闭包中,cat这个变量对象,仍然在被引用,所以不会被销毁。 浅谈对Js闭包的理解,搜素材,soscw.com 浅谈对Js闭包的理解 标签:style blog class code java color 原文地址:http://www.cnblogs.com/chrysalis-china/p/3712688.html
var
cat =
"Hello Kitty"
;
function
findCat(){
var
cat =
"Garfield"
var
dog =
"Odie"
return
function
(){
return
alert(cat);
}
}
var
myCat = findCat();
myCat();
//Garfield