匿名函数:意如其名,就是没有名字的函数。

function (arg1,arg2){.....
}

匿名函数的普遍用法:

1、赋值给变量:

var func=function(arg1,arg2){...}

2、作为参数传进另一个函数:

document.getElementById("test").addEventListener("click",function(){..},false)

匿名函数与闭包:很多人都将匿名函数和闭包混为一谈,其实根本就俩回事。


说到闭包,我们得重新了解Javascript的作用域,

执行环境(execution context):汤姆大叔的叫法是执行上下文,我习惯了称它为环境。

《javascript高级程序》的解释是这样的,执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。

1、在每个执行环境中,都有一个变量对象(variable object)。

2、变量对象保存着对应的执行环境中的所有变量函数。(我们没法访问他,但是解析器在处理数据的时候会在后台使用它)

3、全局执行环境是最外围的一个执行环境,相对于浏览器来说,其实就是window对象啦!

4、每个执行环境的所有代码执行完毕后,该环境都会销毁,而window对象的执行环境要销毁的话,除非关闭网页或浏览器……

每个函数都有自己的执行环境,当解析器开始解析这个函数时,会把这个函数的环境推入到环境栈中,(栈的特性了都知道吧?)当函数执行完后,又将这个函数的环境从环境栈中弹出。

* 当代码在执行环境中运行的时候,会创建变量对象的一个作用域链(scope chain),其实作用域链很好理解,就是控制所有变量和函数对这个执行环境的有序访问,作用域的前端,始终都是当前代码所在环境的变量对象。如果这个环境是函数,,则将其活动对象作为变量对象。(PS:活动对象就是包含了函数的形参,arguments对象)。

function compare(val1,val2){return val1+val2;
}

compare(5,10);

如图所示:

  1、当运行compare()函数时,马上创建变量对象的作用域链scope chain,作用域链的顶端0存储的是当前执行环境的变量对象,因为compare()是函数,所以它的变量对象就是活动对象。

  2、作用域链的第二层,就指向全局环境啦!

如果你能搞懂Javascript的作用域,那闭包就不难理解了!

转载于:https://www.cnblogs.com/w3develop/archive/2013/05/16/3081559.html

Javascript进阶:匿名函数详解相关推荐

  1. 匿名函数python_基于python内置函数与匿名函数详解

    内置函数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() d ...

  2. [js]JavaScript Number.toPrecision() 函数详解

    [js]JavaScript Number.toPrecision() 函数详解 JavaScript: numberObject.toPrecision( [ precision ] ) 如果没有提 ...

  3. java的匿名函数_JAVA语言中的匿名函数详解

    本文主要向大家介绍了JAVA语言中的匿名函数详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一.使用匿名内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: ...

  4. python 闭包中的匿名函数详解!

    匿名函数 孔子曰:温故而知新,可以为师矣. 天若有情天亦老,人间正道是沧桑. Python–lambda表达式 lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就 ...

  5. C# 匿名函数 详解

    文章目录[点击展开](?)[+] 匿名函数的定义和用途 两种匿名函数 C委托的发展 C 10 C 20 C 30 从 C 10 到 C 30委托示例 Unity支持C30的lambda MSDN委托文 ...

  6. Python中匿名函数详解

      匿名函数是指没有名字的函数,应用在需要一个函数,但是又不想费神去命名这个函数的场合.通常情况下,这样的函数只使用一次.在Python中,使用 lambda 表达式创建匿名函数,其语法格式如下: r ...

  7. MATLAB 匿名函数详解(超级全面)

    匿名函数与之相对的即为需要.m文件存储的命名函数,匿名函数可以在任意地方定义(包含命令行窗口),且由于没有固定的名称,函数是可以像变量一样被传递的.以下详细讲解一下MATLAB中不可或缺的一部分具体能 ...

  8. javascript Math.pow 函数 详解 【附】年均增长率计算

    语法 Math.pow(x,y) 定义和用法 pow() 方法可返回 x 的 y 次幂的值. 处理简单数学问题 6的4次方等于1296,记作:64=1296; 求值: Math.pow(6,4)=12 ...

  9. JavaScript的函数详解

    JavaScript的函数详解 一.什么是函数 二.函数的使用 1.函数的声明 2.函数的调用 3.函数的参数:参入运算的数据 (1)形参(形式参数) (2)实参(实在参数): (3)参数之间的数据传 ...

最新文章

  1. 德州学院计算机吴,计算机与信息学院举办“博士讲堂”系列讲座
  2. Linux下常用的压缩与解压命令
  3. Go Time常用语法
  4. python打包成.exe程序
  5. js实现日历框上一日下一日_一日三项令人兴奋的Lucene功能
  6. SpringMVC核心——视图渲染(包含视图解析)问题
  7. 一文知晓浪潮云海OS在SPEC Cloud测试中的调优实践!
  8. java线程安全例子_Java总结篇系列:Java多线程(三)
  9. springboot jwt token前后端分离_7个开源的 Spring Boot 前后端分离项目,一定要收藏!...
  10. linux脚本监控网卡流量,Shell脚本实现linux监控网卡实时流量[带宽]的方法
  11. Sublime搭建Java程序运行环境
  12. Vue开源项目库汇总-转
  13. Windows下Perl环境安装和使用
  14. Thread-Specific Data(线程私有数据)
  15. eclipse开发首选项
  16. 【linux】net-speeder减少由于网络距离过远导致的丢包问题
  17. 布尔矩阵与个性化推荐系统(原创)
  18. ::before和::after伪元素的使用及优惠券案例
  19. QVector常见使用方法
  20. 欧洲对撞机实现最高能级对撞 启动宇宙大爆炸实验

热门文章

  1. python【力扣LeetCode算法题库】53- 最大子序和
  2. python【数据结构与算法】 python3 deque模块(双端队列)
  3. atoi() //把字符串转换成整型数
  4. 计算机在有机合成中的应用,计算机在有机合成中的应用
  5. linux查询python的进程树_如何在Linux中查看所有正在运行的进程
  6. java版扫雷下载_Java 实现扫雷游戏(MineSweeper)
  7. 学院后勤报修系统php_2020年西航后勤管理服务技能培训
  8. 四川网络推广介绍搜索引擎从哪几个方面判断网站质量好坏?
  9. 网络营销越来越“内卷”,SEO优化时需注意什么细节?
  10. php excel 组件,Yii Framework框架使用PHPExcel组件的方法示例