`
zhouyrt
  • 浏览: 1180941 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Javascript中匿名函数的多种调用方式

阅读更多

js中定义函数的方式有多种,函数直接量就是其中一种。如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数。

好,看看匿名函数的如何被调用。

1、执行后得到返回值的函数调用

//方式1,调用函数,得到返回值。强制运算符使函数调用执行
(function(x,y){
    alert(x+y);
    return x+y;
}(3,4)); 

 

//方式二,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用再去调用执行
(function(x,y){
    alert(x+y);
    return x+y;
})(3,4);

 



2、执行后忽略返回值

//方式三,调用函数,忽略返回值
    void function(x) {
          x = x-1;
          alert(x);
    }(9);



嗯,最后看看错误的调用方式

//错误的调用方式
function(x,y){
    alert(x+y);
    return x+y;
}(3,4);

 

 

错误原因见:javascript中大括号“{}”的多义性

分享到:
评论
4 楼 yunhaifeiwu 2008-12-02  
下面是从ymPrompt 3.0版源码中剥离整理出来的。目的是揣磨别人代码中的
div等标签拖动的处理方式。由于是为了便于阅读,与原来的代码有一定的差别。
如:原来有这样的语句:
   var d=document,db=d.body,y=ymPrompt;

在下面的代码中,为了便于阅读取消了这种方式,但是如果要在实际使用中,
建议不要取消。因为,这缩代了js代码(如果有第三方js压缩软件,不取消
也未偿不可)。

在下面的代码中,注意 如下的代码:
  (function(){})();

其中花括号中有许多语句。这种方式,基本上可这样看待:定义了一个函数,并立即
调用它。 这种代码作用,初步估计是为了减少内存泄露之类的吧。

另外,其事件处理方式中,没有搞得很明白,暂时会用自已的方式处理事件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
	<title>ymPrompt </title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
	<script type="text/javascript">
	</script>
 </head>
 <body>
    <div id="dd" style="background:#FC6; width:80px; position:absolute">ssss</div>
    <script type="text/javascript">


    //用json的形式定义了对象
    var fc={
        d:"d1111",
        targDiv:null,
        ds:function( ){
            alert("sss");//无啥意义的函数
        },
        copy:function(o,c){//这是一个把c中定义的函数与变量,拷贝到对象o中。
            o=(o&&typeof o=='object')?o:{};
            if (o && c && typeof c == 'object')
                for(var p in c)o[p] = c[p];
            return o;
        }
    }
    //*****************上面这个对象使用例子程序**************
    //使用fc的copy函数,把用json形式定义的对象与函数拷贝到fc对象中
    //fc.copy(fc,{
    //    b:"b111",
    //    tel:function(){
    //        alert("fc.copy");
    //    }
    //});
    //fc.tel(); //由于有上面一个语句,这里可以调用tel函了。
    //***********************************************


    fc.targDiv=document.getElementById("dd");//设定一个目标对象,本例就是要拖动它
    //这里有一个奇怪形式的函数,为了描述方便,姑且叫临时函数吧。
    (function(){
        //浏览器类型判断
        var browser=function(s){
            return navigator.userAgent.toLowerCase().indexOf(s)!=-1
        };
        var isOpera=browser('opera');
        var isIE=browser('msie')!=-1&&(document.all&&!isOpera);
        
        //统一定义一个事件绑定函数,以兼容主流浏览器的事件注册
        var addEvent=(function(){
            return eval(['1,function(env,fn,obj){obj=obj||document;',
                isIE?"obj.attachEvent('on'+env,fn)":
                    'obj.addEventListener(env,fn,false)',
                '}'].join(''))
        })();
        

        //鼠标左键按下响应函数
        var dragVar,setDrag=function(e){
            e=e||window.event;
            dragVar=fc.copy(dragVar,
                {startDrag:true,
                    startX:e.x||e.pageX,
                    startY:e.y||e.pageY,
                    containX:fc.targDiv.offsetLeft,
                    containY:fc.targDiv.offsetTop
                }
            );
        };
        //关联鼠标左键按下事件 到setDrag函数
        addEvent('mousedown',setDrag,fc.targDiv);

        //鼠标移动响应事件及其响应函数
        addEvent("mousemove",function(e){
            if(dragVar&&dragVar.startDrag){
                e=e||window.event;
                fc.targDiv.style.left=(dragVar.containX+(e.x||e.pageX)-dragVar.startX)+"px";
                fc.targDiv.style.top=(dragVar.containY+(e.y||e.pageY)-dragVar.startY)+"px";
            }
        });

        //鼠标左键释放及其响应函数
        addEvent("mouseup",function(){dragVar=null});
		  
    })();

   </script>
 </body>
</html>
3 楼 liucl_tiger 2008-12-02  
学习了,我还从来没有这样用过!谢谢!
2 楼 zhouyrt 2008-12-02  
《悟透javascript》这本书上周我在中关村图书大厦看了,很漂亮。
1 楼 yunhaifeiwu 2008-12-02  
这个东东,在关联事件与事件响应函数上,可方便的捕捉到多种对象,再通过apply,完成事件参数传递。当然,从中也能加上自已定义的参数。

这个东东,我在《悟透javascript》中,及ymPrompt源码中也看见。ymPrompt源码中
按这种方式使用:
(function(){})();
其中花括符中是一大堆业务逻辑代码。

据个人推测,用来封装一些临时变量。

相关推荐

    javaScript匿名函数

    本文将对 JavaScript 匿名函数的定义、创建、调用方式、闭包的概念等进行详细的介绍。 一、函数的定义 在 JavaScript 中,函数可以定义的方式有多种。第一种方式是使用 function 关键字,例如: ``` function ...

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

    Javascript中定义函数的方式有多种,函数直接量就是其中一种。如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数。好,看看匿名函数的如何被调用。 方式1,调用函数,得到返回值。强制...

    Javascript中匿名函数的多种调用方式总结

    在上述的调用方式中,还提到了一些JavaScript库如jQuery和Mootools常用的方法,这些框架通常在编写自执行函数时采用类似的匿名函数调用方式,以实现模块化和封装代码。 虽然上述方式提供了多种匿名函数的调用方法,...

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

    ### JavaScript匿名函数调用示例解析 #### 一、引言 在JavaScript编程语言中,函数是一等公民,这意味着函数可以作为参数传递给其他函数,也可以作为其他函数的返回值。这种灵活性使得JavaScript中的函数非常强大。...

    JavaScript中匿名函数的用法及优缺点详解_.docx

    总的来说,匿名函数在JavaScript中起着至关重要的作用,它们提供了一种简洁且灵活的方式来处理函数,尤其是在需要创建临时或一次性使用的函数时。然而,使用匿名函数时需谨慎,确保代码的可读性和性能。在实际开发中...

    Javascript的匿名函数讲解

    匿名函数是JavaScript语言中的一个强大特性,它允许我们不给函数命名,直接声明并执行。在本文中,我们将深入了解匿名函数的定义、特点、代码模式以及应用。 首先,需要明白什么是匿名函数。在JavaScript中,定义...

    JS中匿名函数的多种调用方法1

    本篇文章将详细讲解14种不同的匿名函数调用方法。 1. **调用函数得到返回值**: 使用强制运算符`()`来立即执行函数,例如 `(function(x,y){ alert(x+y); return x+y;})(3,4);`。这种方法会立即执行函数,并可以...

    JavaScript中匿名函数的递归调用

    不管是什么编程语言,... 那么问题来了,我们知道在Javascript中,有一类函数叫做匿名函数,没有名称,怎么调用呢?当然你可以说,可以把匿名函数赋值给一个常量: const factorial = function(n){ if (n &lt;= 1) {

    js中匿名函数的创建与调用方法分析.docx

    ### JavaScript中匿名函数的创建与调用方法分析 #### 一、概述 在JavaScript中,函数是一等公民,这意味着函数可以作为参数传递给其他函数,也可以作为其他函数的返回值。这种灵活性使得JavaScript中的函数非常强大...

    (转载)JavaScript中匿名函数,函数直接量和闭包.docx

    在JavaScript中,匿名函数、函数直接量和闭包是三种非常重要的概念,它们在编程实践中有着广泛的应用。让我们逐一深入探讨这些概念。 1. **匿名函数**: 匿名函数是指没有名字的函数,通常作为表达式的一部分存在...

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

    匿名函数就是没有实际名字的函数。 javaScript的匿名函数形式多样,而且不搞清楚,容易看晕代码。 以下是成功调用的匿名函数: 代码如下: (function () { alert&#40;... //运算符+匿名函数调用 (f

    JavaScript程序设计课件:匿名函数.pptx

    概念:所谓函数表达式指的是将声明的函数赋值给一个变量,通过变量完成函数的调用和参数的传递,它也是JavaScript中另一种实现自定义函数的方式。 5.5 匿名函数 函数表达式 var fn = function sum(num1, num2) { ...

    JavaScript中匿名函数的用法及优缺点详解_.pdf

    JavaScript中的匿名函数是一种不具有名称的函数,它们主要通过函数表达式或Function构造函数来创建。匿名函数在JavaScript中有着广泛的应用,特别是在避免全局变量污染、实现模块化和函数式编程等方面。以下是对匿名...

    JavaScript 匿名函数和闭包介绍

    在讨论JavaScript编程语言时,匿名函数和闭包是两个重要的概念,它们在函数式编程和模块化代码设计中扮演着核心角色。匿名函数是没有具体名称的函数,它们可以是独立的,也可以是表达式的一部分,通常用于定义临时...

    JavaScript中具名函数的多种调用方式总结

    JavaScript中的具名函数有多种调用方式,本文将总结其中的四种方法,主要包括普通函数调用、使用call方法、使用apply方法以及使用new关键字调用。 首先,最常见也是最直接的函数调用方式是使用圆括号()。这通常是在...

    匿名函数的一点知识

    ### 知识点:匿名函数在JavaScript中的应用与特性 #### 标题解析:“匿名函数的一点知识” 标题“匿名函数的一点知识”简洁明了地指出本文将围绕JavaScript中的匿名函数进行讲解,旨在帮助读者深入理解匿名函数的...

    javascript笔记之匿名函数和闭包

    JavaScript中的匿名函数和闭包是两个非常重要的概念,它们在函数式编程和模块化开发中起着关键作用。 首先,让我们来理解匿名函数。匿名函数,顾名思义,是没有名称的函数。在JavaScript中,我们可以直接定义一个不...

Global site tag (gtag.js) - Google Analytics