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

<!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>
posted @ 2019-05-26 23:17  没有翅膀的脚  阅读(172)  评论(0编辑  收藏  举报