首页 > 其他 > 详细

闭包里面的函数调用时发生了什么

时间:2019-05-27 00:05:15      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:包含   port   reat   作用域链   meta   name   回收   指向   content   

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>闭包里面的函数调用时发生了什么</title>
</head>
<body>
 


<script>
function creatCompareFunction (propertyName) {
return function(object1,object2) {
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
};
}
//调用creatCompareFunction函数。
var compare = creatCompareFunction (‘name‘);
//此时返回的是一个匿名函数,并将其赋值给变量compare
//这个函数调用时:创建执行环境1,产生作用链1,
//0级是活动对象里面包含arguments和name形参。
//1级是外部函数对象(全局):
//creatCompareFunction指向执行环境,和result(此时未定义)。
var result = compare({name: ‘AAA‘},{name: ‘BBB‘}); //调用匿名函数
//匿名函数调用时:创建执行环境2,产生作用域链2,
//0级是活动对象里面包含arguments和object1、object2形参。
//1级是其外部函数的活动对象:creatCompareFunction的活动对象。
//2级是其外部函数的外部函数活动对象:全局。
compare = null;
//解除匿名函数的引用,就相当于通知垃圾回收机制将其清除。
//一旦匿名函数的作用域链被销毁,那么其他的作用域被销毁(除了全局。)
 
</script>
</body>
</html>

闭包里面的函数调用时发生了什么

标签:包含   port   reat   作用域链   meta   name   回收   指向   content   

原文:https://www.cnblogs.com/zy-skl/p/10928279.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号