博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
闭包里面的函数调用时发生了什么
阅读量:7054 次
发布时间:2019-06-28

本文共 1074 字,大约阅读时间需要 3 分钟。

<!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>

转载于:https://www.cnblogs.com/zy-skl/p/10928279.html

你可能感兴趣的文章
C#实现局部峰值查找,功能对应Matlab中的findpeaks.m
查看>>
响应式编程
查看>>
The Road to learn React书籍学习笔记(第一章)
查看>>
WPF 自定义控件的坑(蠢的:自定义控件内容不显示)
查看>>
Confluence 6 空间标识
查看>>
使用kubeadm安装Kubernetes v1.10以及常见问题解答
查看>>
Linux FTP上传脚本
查看>>
Robot Framework之pymysql数据库查询
查看>>
干货 | 机器学习没有你想的那么复杂
查看>>
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 16 章 从源代码安装_16.1. 简单版
查看>>
springMVC的事务不回滚
查看>>
WPF与缓动(三) 指数缓动
查看>>
UPS电源和EPS电源的主要区别
查看>>
虚拟接VMnet1 和VMnet8的区别
查看>>
爱奇艺体育获5亿元战略融资 ,IDG资本、汇盈博润领投
查看>>
三目运算-高级嵌套用法思路教程
查看>>
从编程小白到全栈开发:寻找代码中的问题
查看>>
如何处理地图投影转换
查看>>
区块链技术公司 看区块链数据如何实现安全共享
查看>>
HttpClient-4.5总结(1)
查看>>