闭包与域
是时候来看下一个带函数的函数是如何工作的:
(function (x) {
return function (y) {
return x
}
})(1)(2)
//=> 1

首先,我们使用我们学过的东西。给出 (某函数)(某参数),我们知道我们将函数应用到参数,创建一个环境,将参数的值绑定到名称,然后对函数表达式求值,所以我们首先用这段代码这样做:
(function (x) {
return function (y) {
return x
}
})(1)
//=> [Function]

这个环境属于带标识的function (x) ... becomes {x: 1, ...}函数,而应用这个函数的结果是另一个函数值。返回值为函数是有意义的,因为function (x) ...的函数体的表达式是:
function (y) {
return x
}
所以现在我们有一个代表该函数的值,现在我们打算取该函数的值然后将它应用到参数2,像这样:
(function (y) {
return x
})(2)

所以我们似乎得到了一个新的环境{y: 2, ...}。在该函数的环境中表达式x将如何被求值呢?在自己的环境中是没有x的,它必须来自其他的地方。

顺便说一下,这是javascript及其同家庭语言的其中一个伟大的定义特征:

最新文章

  1. JSP里面ajax不能返回后台传出的值得问题。。。。
  2. 【淘淘】Quartz作业存储与管理
  3. 数位DP之奥义
  4. Android 手机卫士--实现设置界面的一个条目布局结构
  5. Delphi项目构成之单元文件PAS
  6. GIS理论(墨卡托投影、地理坐标系、地面分辨率、地图比例尺、Bing Maps Tile System)
  7. Android开发学习总结(五)——Android应用目录结构分析
  8. Android完美解决输入框EditText隐藏密码打勾显示密码问题
  9. 创建springbootdemo后运行报MongoSocketOpenException错误解决方法
  10. (2)Deep Learning之线性单元和梯度下降
  11. ListBox设置背景色无效的问题。 listview类似
  12. C风格字符串和C++string对象的相互转化
  13. FireMonkey 源码学习(2)
  14. Greys--JVM异常诊断工具
  15. 分享一个基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具
  16. Java 的双重分发与 Visitor 模式
  17. mysql数据优化--数据库结构的优化
  18. mysql exceeded the 'max_questions' resource 记录
  19. SQL一次性查询一个字段不同条件下的统计结果
  20. JMeter学习笔记(一) 工具的安装和基本介绍

热门文章

  1. 有哪些逾渗模型percolation?
  2. PHP生成一个不重复随机数组的封装方法
  3. Python: PS滤镜--径向模糊
  4. Opencv— — Circle Filter
  5. Service的两种启动方式
  6. bzoj2257瓶子与燃料——最大公约数
  7. bzoj4455
  8. c/c++面试45-50之字符串
  9. HDU 2586 How far away ? (LCA,Tarjan, spfa)
  10. PhpStorm之配置数据库连接