`

JS匿名函数

阅读更多
js匿名函数确实是个好东西.

Javascript代码
<body onload="alert('http://www.baidu.com/');">  
<script type="text/javascript">  
void function()
{  
	alert('弹出框'); 
}(); 
</script>
</body>


<body onload="alert('http://www.baidu.com/');">
<script type="text/javascript">
void function()
{
	alert('弹出框');
}();
</script>
</body>



还可以写成:

Javascript代码
<body onload="alert('http://www.baidu.com/');">
<script type="text/javascript">
(function()
{
	alert('弹出框');
})();
</script>
</body>


<body onload="alert('http://www.baidu.com/');">
<script type="text/javascript">
(function()
{
	alert('弹出框');
})();
</script>
</body>



从以上例子中可以看出,js匿名函数的执行是在 onload 之前,那么空函数是否可以取代onload的动作?

js匿名函数的写法还有n多种.
顾名思义,匿名函数就是没有实际名字的函数。例如,我们把上面的例子中,函数的名字去掉,再判断一下他是不是一个函数:
复制代码 代码如下:
alert(typeof function(){});// "function" 
alert(typeof function(x,y){return x+y;});// "function" 
alert(typeof new Function("x","y","return x*y;"))// "function" 
alert(typeof function(){});// "function" alert(typeof function(x,y){return x+y;});// "function" alert(typeof new Function("x","y","return x*y;"))// "function" 


  我们可以很容易地看到,它们全都是Function对象,换言之,他们都是函数,但是他们都有一个特点——没有名字。所以我们把他们称作“匿名函数”。然而,正因为他们没有“名字”,我们也没有办法找到他们。这就引申了如何去调用一个匿名函数的问题了。
匿名函数的调用
  要调用一个函数,我们必须要有方法定位它,引用它。所以,我们会需要帮它找一个名字。例如:
复制代码 代码如下:
var abc=function(x,y)
{ 
	return x+y; 
} 
alert(abc(2,3)); // "5" 
var abc=function(x,y){ return x+y; } alert(abc(2,3)); // "5" 


  上面的操作其实就等于换个方式去定义函数,这种用法是我们比较频繁遇到的。例如我们在设定一个DOM元素事件处理函数的时候,我们通常都不会为他们定名字,而是赋予它的对应事件引用一个匿名函数。
  对匿名函数的调用其实还有一种做法,也就是我们看到的jQuery片段——使用()将匿名函数括起来,然后后面再加一对小括号(包含参数列表)。我们再看一下以下例子:
复制代码 代码如下:
alert((function(x,y){return x+y;})(2,3));// "5" 
alert((new Function("x","y","return x*y;"))(2,3));// "6" 
alert((function(x,y){return x+y;})(2,3));// "5" alert((new Function("x","y","return x*y;"))(2,3));// "6" 


  很多人或许会奇怪,为什么这种方法能成功调用呢?觉得这个应用奇怪的人就看一下我以下这段解释吧。
  大家知道小括号的作用吗?小括号能把我们的表达式组合分块,并且每一块,也就是每一对小括号,都有一个返回值。这个返回值实际上也就是小括号中表达式的返回值。所以,当我们用一对小括号把匿名函数括起来的时候,实际上小括号对返回的,就是一个匿名函数的Function对象。因此,小括号对加上匿名函数就如同有名字的函数般被我们取得它的引用位置了。所以如果在这个引用变量后面再加上参数列表,就会实现普通函数的调用形式。
  不知道以上的文字表述大家能不能看明白,如果还是理解不了的话,再看一下以下的代码试试吧。
复制代码 代码如下:
var abc=function(x,y){return x+y;};// 把匿名函数对象赋给abc 

// abc的constructor就和匿名函数的constructor一样了。也就是说,两个函数的实现是一样的。
alert((abc).constructor==(function(x,y){return x+y;}).constructor); 
var abc=function(x,y){return x+y;};// 把匿名函数对象赋给abc // abc的constructor就和匿名函数的constructor一样了。也就是说,两个函数的实现是一样的。 alert((abc).constructor==(function(x,y){return x+y;}).constructor); 


  PS:constructor是指创建对象的函数。也就是函数对象所代表的函数体。
  总之,将其(被小括号包含的匿名函数)理解为括号表达式返回的函数对象,然后就可以对这个函数对象作正常的参数列表调用了。(前面这里犯了个错误,只有函数表达式还是不能直接调用函数的,去掉匿名函数括号必须要伴随将表达式赋值。也就是(function(){alert(1)})()应该是与 a=function(){alert(1)}()等价,不能连a=都去掉。)
分享到:
评论
1 楼 musicbox95351 2012-06-26  
学习了:)

相关推荐

    javaScript匿名函数

    javaScript匿名函数

    JS匿名函数、闭包

    匿名函数,也称为拉姆达函数,是一种使用JavaScript函数的强大方式。以下总结了匿名函数的特点: 任何函数表达式从技术上说都是匿名函数,因为没有引用它们的确定的方式; 在无法确定如何引用函数的情况下,递归...

    Javascript的匿名函数

    Javascript的匿名函数

    JS匿名函数实例分析

    主要介绍了JS匿名函数,结合实例形式分析了javascript匿名函数的定义、参数、返回值等相关使用方法,需要的朋友可以参考下

    JS匿名函数和匿名自执行函数概念与用法分析

    本文实例讲述了JS匿名函数和匿名自执行函数概念与用法。分享给大家供大家参考,具体如下: 1. 匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景: &lt;input type=button value=点击 id=...

    JS匿名函数类生成方式实例分析

    主要介绍了JS匿名函数类生成方式,结合实例形式分析了javascript匿名函数类相关属性与方法定义与使用技巧,需要的朋友可以参考下

    javascript匿名函数应用示例介绍

    javascript匿名函数,就是说个函数没有名字,下面先列出测试代码 代码如下: /* * 一般常见函数是这样 */ function debug(data) { console.log(data); } 但有的函数,它却偏偏写成了这样 代码如下: (function(x, y) {...

    不使用 JS 匿名函数理由

    本文给大家分析了不使用js匿名函数的三大理由,匿名函数的作用是避免全局变量的污染以及函数名的冲突,关于js匿名函数的三大理由大家参考下本

    js匿名函数的调用示例(形式多种多样).docx

    js匿名函数的调用示例(形式多种多样).docx

    JavaScript函数的一些注意要点小结及js匿名函数

    本文给大家总结了javascript函数的一些注意要点及js匿名函数,主要知识点有:函数的基本语法、函数的参数、函数的重载相关知识,对本文感兴趣的朋友一起学习吧

    js匿名函数作为函数参数详解

    下面小编就为大家带来一篇js匿名函数作为函数参数详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    js匿名函数使用&传参(实例)

    下面小编就为大家带来一篇js匿名函数使用&传参(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    android-js-bridge:android js 互相调用,android端可以接收js的匿名函数,新版本 https

    #####支持js匿名函数接收 #####支持js json对象接收 #####支持js函数返回值获取 #####通过注解注入js方法,支持自定义方法名 Add it in your root build.gradle at the end of repositories: allprojects { ...

    javascript笔记之匿名函数和闭包

    本文介绍了js匿名函数和闭包的相关内容,供大家参考,具体内容如下 匿名函数 [removed] //function(){}//会报错 var fun = function(){};//将匿名函数赋值给变量 (function(){})();//匿名函数自执行 function...

    javascript匿名函数实例分析

    主要介绍了javascript匿名函数,以实例形式详细分析了javascript匿名函数的定义、用法及注意事项,具有很好的学习借鉴价值,需要的朋友可以参考下

    JavaScript 匿名函数(anonymous function)与闭包(closure)

    匿名函数 闭包 变量作用域 函数外部访问函数内部的局部变量 用闭包实现私有成员 引入 闭包是用匿名函数来实现。闭包就是一个受到保护的变量空间,由内嵌函数生成。“保护变量”的思想在几乎所有的编程语言中都...

    js的匿名函数使用介绍

    1.匿名函数概述 关于匿名函数的第一次认识还是在jquery源码里,打开jQuery首先看到的是 代码如下: (function( window, undefined ) {…………………..})(window); 这就是一个匿名函数,红色为参数,匿名函数的作用是...

    Javascript中匿名函数的调用与写法实例详解(多种)

    js中定义函数的方式有很多种,函数直接量就是其中一种,下面通过本文给大家介绍匿名函数是如何调用的及匿名函数的n中写法,对js匿名函数调用,js匿名函数写法相关知识感兴趣的朋友一起学习吧

    javascript 匿名函数的理解(透彻版)

    代码如下: (function(){ //这里忽略jQuery所有实现 })();...当一个匿名函数被括起来,然后再在后面加一个括号,这个匿名函数就能立即运行起来!真神奇哦! 嘿嘿!胡闹到此为止。在这一节,我们碰到

Global site tag (gtag.js) - Google Analytics