js匿名函数--转了
一、什么是匿名函数?
在Javascript定义一个函数一般有如下三种方式:
函数关键字(function )语句:function fnMethodName(x) {alert(x);
}函数字面量(Function Literals):var fnMethodName = function (x) {alert(x);
}Function()构造函数:var fnMethodName = new Function('x', 'alert(x);')上面三种方法定义了同一个方法函数fnMethodName,第1种就是最常用的方法,后两种都是把一个函数复制给变量fnMethodName,而这个函数是没有名字的,即匿名函数。实际上,相当多的语言都有匿名函数。二、函数字面量和Function()构造函数的区别虽然函数字面量是一个匿名函数,但语法允许为其指定任意一个函数名,当写递归函数时可以调用它自己,使用Function()构造函数则不行。var f = function fact(x) {if (x <  = 1)return 1;elsereturn x * fact(x - 1);
};Function()构造函数允许运行时Javascript代码动态的创建和编译。在这个方式上它类似全局函数eval()。Function()构造函数每次执行时都解析函数主体,并创建一个新的函数对象。所以当在一个循环或者频繁执行的函数中调用Function()构造函数的效率是非常低的。相反,函数字面量却不是每次遇到都重新编译的。用Function()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。var y = "global"; function constructFunction() {var y = "local";return new Function("return y"); // 无法获取局部变量}alert(constructFunction()()); // 输出 "global"和函数关键字定义相比Function()构造器有自己的特点且要难以使用的多,所以这项技术通常很少使用。而函数字面量表达式和函数关键字定义非常接近。考虑前面的区别,虽然有消息说字面量的匿名函数在OS X 10.4.3下的某些webkit的引擎下有bug,但我们平常所说的匿名函数均指采用函数字面量形式的匿名函数。更多详细内容可以阅读《JavaScript : The Definitive Guide,5th Edition》的Functions那章。三、匿名函数的代码模式昨天hedger wang在他的blog介绍了几种匿名函数的代码模式:错误模式:其无法工作,浏览器会报语法错。function () {alert(1);}();函数字面量:首先声明一个函数对象,然后执行它。(function () {alert(1);})();优先表达式:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。(function () {alert(2);}());Void操作符:用void操作符去执行一个没有用圆括号包围的一个单独操作数。void function () {alert(3);}()这三种方式是等同的,hedger wang因为个人原因比较喜欢第3种,而在实际应用中我看到的和使用的都是第1种。四、匿名函数的应用《Javascript的一种模块模式》中的第一句话就是“全局变量是魔鬼”。配合var关键字,匿名函数可以有效的保证在页面上写入Javascript,而不会造成全局变量的污染。这在给一个不是很熟悉的页面增加Javascript时非常有效,也很优美。实际上,YUI以及其相应的范例中大量使用匿名函数,其他的Javascript库中也不乏大量使用。Javascript的函数式编程(functional programming)的基石。具体请看《用函数式编程技术编写优美的 JavaScript》和《函数式JavaScript编程指南》。

posted on 2015-05-18 18:17 _bisu 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/bisu/p/4512702.html

js匿名函数--转了相关推荐

  1. java调用js匿名函数参数,js匿名函数作为函数参数详解

    由衷的感叹,js真是烦. 学到现在,渐渐理解了什么是:语言都是通用的,没有好不好,只有擅长不擅长. 继承,多态,甚至指针,c能实现,c++,java有,javascript(和java是雷锋和雷峰塔的 ...

  2. js匿名函数、箭头函数,区别

    js匿名函数.箭头函数,以及他们的区别 匿名函数 箭头函数 区别 1.匿名函数 简单点说就是没有名字的函数,在声明函数时不写函数名称,(将函数赋值给变量)叫匿名函数. 匿名函数可以有效的保证在页面上写 ...

  3. js匿名函数和立即执行函数

    js匿名函数和立即执行函数 1. 匿名函数 a)写法 b) 特点 2. 立即执行函数 a) 写法 b) 特点 c) 示例 1. 匿名函数 匿名函数又叫拉姆达函数, 使用前需要先赋值. a)写法 //h ...

  4. js 匿名函数_编写高质量箭头函数的5个最佳做法

    作者:Dmitri Pavlutin译者:前端小智 来源:dmitripavlutin.com 箭头功能值得流行.它的语法简洁明了,使用词法绑定绑定 this,它非常适合作为回调.在本文中,通过了解决 ...

  5. js 匿名函数_javascript:函数的使用

    大家好,我是专注于前端开发,前端入门,精神可爱的前端小学妹,本期为大家带来的Web前端学习知识是"javascript:函数的使用",喜欢Web前端的朋友,一起看看吧! 主要内容: ...

  6. js匿名函数和具名函数

    按照ECMAScript标准,函数表达式的样式如下(opt记号代表的是可选的,也就是可有可无的意思): FunctionExpression : function Identifier opt ( F ...

  7. JS 匿名函数——几种不同的调用方式

    匿名函数声明和使用 匿名函数有两种用法: 赋值 自我执行 1.声明一个匿名函数,直接赋值给某一个事件 windon.onload = function(){alert('hello'); }; 2.使 ...

  8. js 匿名函数及闭包

    转载来源:https://www.cnblogs.com/chenxianbin89/archive/2010/01/28/1658392.html 网上很多解释,我无法理解,我想知道原理...这篇文 ...

  9. 有趣的js匿名函数写法(function嵌套)

    例子没有什么实际意义,只能做为思路参考 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...

最新文章

  1. java比较字符引用地址_java中的比较运算符== 与 equals()方法
  2. Prototype Pattern
  3. mysql常见错误及解决办法_mysql常见错误代码、原因及处理办法
  4. 数据库流行度8月排行榜:Oracle 飙升 和 PostgreSQL 绝尘领跑第二梯队
  5. go按行读取数据的坑
  6. USACO 4.3.1 Buy Low, Buy Lower
  7. 到底什么是模型预测控制MPC(一)
  8. 数字万用表判断绝缘栅场效应管的好坏
  9. Linux -- 代理服务器(Squid Server)的配置与应用2
  10. ajax请求有多少种写法,Ajax 请求的三种写法
  11. day06 Elasticsearch搜索引擎2
  12. 《GOOGLE HACKS巧妙使用网络搜索的技巧和工具(第二版)》
  13. VS2017初学者如何打开右侧的解决方案资源管理器
  14. 文件系统之软连接、硬链接的区别/文件删除与空间的联系/df和du的区别
  15. 【C语言】PAT乙级1002 :写出这个数
  16. 站点类型、tdk布局和采集规则
  17. 使用VisualGDB实现esp32s2 usb HID功能
  18. js中showModalDialog函数用法
  19. 实验记录 | 6/7 收一下尾巴
  20. 北斗导航 | GBAS:双星座/双频点 CAT II/III 完好性(DC/DF GBAS Integrity)

热门文章

  1. 08 内存分配和程序内存布局
  2. e0266 cout 不明确_荐书 | 不正义的时代,识别不正义的多重面孔
  3. 关联 VMware 产品的内部版本号和版本 (1014508)
  4. 2019年全网首发-vSphere 7之VCSA 7.0 RC部署指南(转载)
  5. Spring Boot学习总结(16)——为什么说Java程序员到了必须掌握Spring boot的时候了?
  6. Docker学习总结(31)——使用Maven插件构建docker镜像
  7. JavaScript学习总结(15)——十大经典排序算法的JS版
  8. php/eq,thinkphp中eq标签的使用
  9. 中修改环境变量_系统小技巧:彻底弄懂Windows 10环境变量
  10. cortex m4 中文手册_奥迪RS4 Avant都来了,新一代宝马M4还会远吗?