JavaScript匿名函数的使用

JavaScript匿名函数的使用:  http://www.cnblogs.com/skykang/archive/2010/12/03/1895274.html

一、什么是匿名函数?

在Javascript定义一个函数一般有如下三种方式:

1. 函数关键字(function)语句:
      function fnMethodName(x){alert(x);}
   2. 函数字面量(Function Literals):
      var fnMethodName = function(x){alert(x);}
   3. Function()构造函数:
      var fnMethodName = new Function(‘x‘,‘alert(x);‘)

上面三种方法定义了同一个方法函数fnMethodName,第1种就是最常用的方法,后两种都是把一个函数复制给变量fnMethodName,而这个函数是没有名字的,即匿名函数。实际上,相当多的语言都有匿名函数。

二、函数字面量和Function()构造函数的区别

1. 虽然函数字面量是一个匿名函数,但语法允许为其指定任意一个函数名,当写递归函数时可以调用它自己,使用Function()构造函数则不行。
      var f = function fact(x) { if (x < = 1) return 1; else return x*fact(x-1); };
   2. Function()构造函数允许运行时Javascript代码动态的创建和编译。在这个方式上它类似全局函数eval()。
   3. Function()构造函数每次执行时都解析函数主体,并创建一个新的函数对象。所以当在一个循环或者频繁执行的函数中调用Function()构造函数的效率是非常低的。相反,函数字面量却不是每次遇到都重新编译的。
   4. 用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,但我们平常所说的匿名函数均指采用函数字面量形式的匿名函数。

三、匿名函数的代码模式

匿名函数的代码模式: 错误模式:其无法工作,浏览器会报语法错。

function(){ alert(1); }();

1. 函数字面量:首先声明一个函数对象,然后执行它。
      (function(){ alert(1); } ) ( );
   2. 优先表达式:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。
      ( function(){ alert(2); } ( ) );
   3. Void操作符:用void操作符去执行一个没有用圆括号包围的一个单独操作数。
      void function(){ alert(3); }()
这三种方式是等同的,hedger wang因为个人原因比较喜欢第3种,而在实际应用中我看到的和使用的都是第1种。

四、匿名函数的应用

1.
《Javascript的一种模块模式》中的第一句话就是“全局变量是魔鬼”。配合var关键字,匿名函数可以有效的保证在页面上写入
Javascript,而不会造成全局变量的污染。这在给一个不是很熟悉的页面增加Javascript时非常有效,也很优美。实际上,YUI以及其相应
的范例中大量使用匿名函数,其他的Javascript库中也不乏大量使用。

2. Javascript的函数式编程(functional programming)的基石。具体请看《用函数式编程技术编写优美的 JavaScript》和《函数式JavaScript编程指南》。

时间: 2024-10-12 09:21:49

JavaScript匿名函数的使用的相关文章

JavaScript 匿名函数

// 仅执行一次的匿名函数 ;(function ()//最常见的版本 圆括号包裹起来 表示输入括号很纠结 懒人绝对不理解为什么要有圆括号 { ; console.log( 1 ,2 ,3 ) }()) ;!function ()//其实也可以这样使用 偷懒成功 { ; console.log( 1 ,2 ,3 ) }() , function ()//只要 function 前面不是 分号 花括号等结束符号 是可以直接用逗号使用的 { ; console.log( 4 ,5 ,6 ) }()

(转)javascript匿名函数的写法、传参和递归

(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-08-07 断桥残雪部落格 投递稿件 我有话说 今天在整理javascript入门培训的PPT时,提到了匿名函数,所以拿来分享下心得. 匿名函数的写法顾名思义,就是没有名字的函数(⊙﹏⊙b汗).匿名函数通常用于javascript作用域的控制,可以有效的避免对全局变量的污染.常见的匿名函数有下面四种写

(转)Javascript匿名函数的写法、传参、递归

(原)http://www.veryhuo.com/a/view/37529.html (转)javascript匿名函数的写法.传参和递归 javascript匿名函数的写法.传参和递归 http://www.veryhuo.com 2011-08-07 断桥残雪部落格 投递稿件 我有话说 今天在整理javascript入门培训的PPT时,提到了匿名函数,所以拿来分享下心得. 匿名函数的写法顾名思义,就是没有名字的函数(⊙﹏⊙b汗).匿名函数通常用于javascript作用域的控制,可以有效的

JavaScript匿名函数与委托

<1> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <!-- C#匿名函数--> <title></title> <script type="text/javascript"> var f1 = function (x, y) { //[1] 定义一个匿名函数,用变量f1来指向它(f1相当于一个委托,这个时候f1就可以当做一个

javascript匿名函数的各种执行形式

近期在研究Pomelo源码,这个框架基于Node.js,所以非要频繁地与JavaScript脚本打交道不可.因此,本文中我们来总结 javascript语言中匿名函数的主要目的及各种存在形式.其实,匿名函数在许多语言中都有提供,这个词语各位应该不陌生. 一.函数与匿名函数        首先,我们来看一下在javascript中正常函数定义的语法: function functionname(var1,var2,...,varX) {     //...函数体 } 如上所示,正常函数的定义需要一

JavaScript匿名函数和回调函数

格式: (function(){ //代码 })(); 函数表达式可以存储在变量中,变量也可以作为一个函数使用 可以将匿名函数作为参数传递给其它函数,接收方函数就可以通过所传递进来的函数完成某些功能 可以通过匿名函数来执行某些一次性的任务 <!doctype html> <html> <head> <meta charset="utf-8"/> <title></title> </head> <b

Javascript 匿名函数与闭包

请见如下一个闭包示例: color = "red"; var obj = { color: "blue", getColor: function () { function displayColor() { return this.color; } return displayColor(); } } console.log(obj.getColor()); 在getColor函数内部再定义了一个displayColor,再又定义了一个displayColor函数,

详谈JavaScript 匿名函数及闭包

1.匿名函数函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种:这也是最常规的一种 function double(x){    return 2 * x;   } 第二种:这种方法使用了Function构造函数,把参数列表和函数体都作为字符串,很不方便,不建议使用. var double = new Function('x', 'return 2 * x;');

简单介绍Javascript匿名函数和面向对象编程

忙里偷闲,简单介绍一下Javascript中匿名函数和闭包函数以及面向对象编程.首先简单介绍一下Javascript中的密名函数. 在Javascript中函数有以下3中定义方式: 1.最常用的定义方式: function functionVal(variable){ return 3*variable; } 2.使用Function构造函数,将函数的参数和函数体内容作为字符串参数[不建议使用]: var objFunction=new Function('variable','return 3