`

源码解析~匿名函数(function(){})();

阅读更多

【前言】

      研究过Javascript代码库的人,会看到很多如下形式的函数: (function(){...}()) 或 (function(){})()

      接下来简单总结概括下匿名函数相关知识点。

 

【主体】

(1)匿名函数:

      (function(){})是一个标准的函数定义,但是没有赋值给任何变量。所以是没有名字的函数,叫匿名函数。没有名字就无法像普通函数那样随时随地调用了,所以在他定义完成后就马上调用他,后面的括号()是运行这个函数的意思。

 

(2)案例解析:

      所以上面可以解释成为“匿名函数自调用”,也就是说,定义一个匿名函数,然后马上调用它(因为它是匿名的,如果不立即调用就获取不到该函数的引用了)。

 

(3)应用:

      通常它被应用在一些大型的JS框架中(如上面所说的),因为这个匿名函数的函数体相当于提供一个匿名的名字空间,这样就不会再与用户自定义的JS函数、变量、对象发生冲突了。尽管JS没有显示地提供命名空间的定义和使用机制,但这种匿名方式却不失为是一种很好的解决命名空间问题的方法。

      匿名函数:

(function(){...})(jQuery);

      常用于存放开发插件的代码,执行其中代码时DOM不一定存在,所以直接自动执行DOM操作的代码要小心使用。开发插件的格式如下:

(function ($) {
        $.fn.test111 = function () {
            alert('test')
        }
})(jQuery);

      调用插件:

$("#elementid").test111();

      匿名函数 function(arg){...} 为匿名函数,参数为arg。调用函数时,是在函数后面写上括号和实参的,由于操作符的优先级,函数本身也需要用括号,即: (function(arg){...})(param) 这就相当于定义了一个参数为arg的匿名函数,并且将param作为参数来调用这个匿名函数 

      而(function($){...})(jQuery)则是一样的,之所以只在形参使用$,是为了不与其他库冲突,所以实参用jQuery。等同于 var fn = function($){....}; fn(jQuery); 

(funtion(){})();立即执行函数;相当于先申明一个函数,声明完后直接调用; 

相当于:

      (funtion(str){alert(str)})("output"));相当于:funtion OutPutFun(str){alert(str);};OutPutFun("output");

 

(4)通俗理解:

      可以理解为一种闭包,把jQuery作为实参传入到形参为$的匿名函数里面。其写法相当于

 

function Test(t){
    alert(t);
}//定义函数
Test("Hello World!");//执行函数
    等价于

 

 

(function(t){alert(t);})("Hello World!");

 

    一般写插件时避免变量全局污染,就用此方式写。

      

 

 

 

.

分享到:
评论

相关推荐

    jQuery源码解析

    通过自执行匿名函数,jQuery确保了自身的封装和独立性,避免了全局变量污染。这种结构如`(function(window, undefined) {...})(window);`确保了在自己的作用域内执行,提高了代码的安全性和可维护性。其中,`...

    JavaScript匿名函数用法分析

    匿名函数,顾名思义,就是没有名称的函数,它非常适合用作一次性或者局部函数。在JavaScript中,匿名函数的使用场景非常广泛,包括函数表达式、事件处理、回调函数等。本文将详细分析JavaScript匿名函数的用法。 ...

    JS自调用匿名函数具体实现

    自调用匿名函数还有其他变体,例如,通过IIFE(Immediately Invoked Function Expression,立即执行的函数表达式)来实现: ```javascript void function() { // 模块代码 }(); ``` 或者使用圆括号包裹整个表达式...

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

    在上述的jQuery源码示例中,立即执行的匿名函数被用来封装代码,防止污染全局作用域,同时创建一个私有的执行环境。 ```javascript (function() { // 私有变量和方法 var privateVar = 'secret'; // 公共接口 ...

    jQuery源码解读

    整个jQuery库被包裹在一个立即执行的匿名函数中,这样可以确保其中定义的所有函数和对象只在这个作用域内可见,起到了类似命名空间的效果。同时,jQuery将其自身和$符号绑定到window对象,使得用户可以在全局范围内...

    java 8 函数式编程 (源码)

    Lambda表达式允许开发者以一种简洁的方式定义匿名函数,它省去了创建单独类的步骤,使得代码更加紧凑。例如,`Runnable r = () -> System.out.println("Hello, Lambda!");` 这就是一个简单的Lambda表达式,它表示了...

    Jquery 源码解读

    ##### 3.1 匿名函数与立即执行 ```javascript (function() { // jQuery 代码 })(); ``` 这段代码定义了一个匿名函数,并立即执行。这意味着函数内的代码会在加载页面时立即运行。 ##### 3.2 命名空间 ```...

    jQuery源码+中文详细注解

    这部分使用了一个立即执行的匿名函数来包裹整个jQuery源码,这样做的目的是形成一个闭包,保护内部的变量不被外部干扰,同时也避免了命名冲突的问题。 ##### 4. 关键字保护 ```javascript var _jQuery = window....

    java1.8源码-javaOriginCodeAnalysis:java源码解析,jdk版本1.8.0_161

    Java 作为世界上最流行的编程语言之一,其源码解析对于开发者来说具有极高的学习价值。JDK 1.8.0_161 是 Java 8 的一个重要更新版本,其中包含了许多重要的特性和改进。通过深入研究这个版本的源码,我们可以更深入...

    jquery源码详细中文注释(非扫描版)

    ### 关于《jQuery源码详细中文注释(非扫描版)》的知识点解析 #### 一、背景介绍 本文档是一份对jQuery源码进行了详细中文注释的资源,由Auscar lin精心制作,旨在帮助广大jQuery爱好者更深入地理解和学习jQuery...

    jQuery源码分析-03构造jQuery对象

    在这个模式下,`jQuery`是一个自执行匿名函数的返回值,而该匿名函数被立即执行,返回一个符合预期的jQuery对象。接下来,我们将重点探讨如何构建jQuery对象以及其内部的一些关键设计。 #### 二、构建jQuery对象 ...

    jquery 解析xml的简单例子

    `.each()`遍历这些元素,并对每个`<item>`执行内部的匿名函数。`$(this).find("title")`和`$(this).find("description")`分别找到当前`<item>`内的`<title>`和`<description>`子元素,然后通过`.text()`获取它们的...

    jQuery实现的鼠标点击弹出登陆框特效源码.zip

    例如,`$("#loginBtn").click(function() {...})`表示当用户点击ID为`loginBtn`的元素时,执行内联的匿名函数。 接下来,弹出登录框通常涉及到元素的显示与隐藏。jQuery提供`show()`和`hide()`方法,用于控制元素的...

    新建文件夹,新建文件夹2,matlab源码.zip

    11. **函数句柄和匿名函数**:函数句柄可用于函数作为参数传递,匿名函数(也称为lambda函数)是简短的无名函数,常用于函数的即时定义和回调。 12. **符号计算**:MATLAB的符号计算工具箱允许进行精确的数学运算,...

    Java Predicate及Consumer接口函数代码实现解析

    使用Predicate函数编程可以使用匿名内部类提供test()方法的实现,也可以使用lambda表达式实现test()。例如: ```java @Test public void testPredicate(){ java.util.function.Predicate<Integer> boolValue = x -...

    JDK1.8源码,包含sun包,org包等,完整的源码

    4. **Lambda表达式和函数式编程**:JDK 1.8引入了重大特性——Lambda表达式,它简化了多参数匿名函数的编写,使得函数式编程风格在Java中变得可行。`java.util.function`包提供了大量函数接口,如`Function`, `...

    jdk1.8源码

    JDK1.8引入了Lambda表达式,这是一种简洁的匿名函数写法,极大地简化了多参数、无状态、无异常的函数式编程。同时,为了支持Lambda,引入了函数式接口,如`Runnable`、`Consumer`、`Function`等。这些接口只有一个...

Global site tag (gtag.js) - Google Analytics