`

自调用匿名函数

阅读更多
通常定义函数并调用
function a(){
}
a();
或是
var a = function(){

}
a();

但是查看jquery源码会发现它最外层的架构是这样的
(function( window, undefined ) {
// jquery code
})(window);

解释:首先jquery是定义了一个匿名函数(所谓的匿名函数就是没有名字的函数,顺便说一下闭包的概念:闭包就是在一个函数内部定义一个函数指向外部函数的一个成员变量,并且内部定义的这个函数访问外部函数中定义的临时变量)
,在最上面的例子中a实际上是function的一个引用,只要在函数的引用后面添加()就能让函数执行,那可不可以直接在匿名函数后面添加()让匿名函数执行呢
function(){}()
执行你会发现报错,javascript引擎在扫描到function时会认为这个一个函数的声明,所以直接在后面调用()会报错,在一个语句后面直接添加括号和一个表达式后面添加括号是两个概念,在语句后面添加的操作符会被认为是分组符号,分组符号内部需要传入表达式才行,如果上面的改成function(){alert("1")}(1)就不会报错,但是上面的函数还是不会执行,这只是相当于定义了2个毫无关系的表达式,function (){} (1);在表达式后面添加括号会让表达式立即执行,但是如果是一个表达式后面添加()就会执行,所以
在匿名函数外面添加()然后再在括号后面添加()就可以进行调用了
javascript中()括起来的部分是不能包含语句的,会被当作表达式处理,所以如果function被()括起来以后就被javascript引擎作为function表达式处理了。

因此jquery最外层就是一个自调用匿名函数。但是他这么做的最大原因是想定义一个命名空间,这样就不会和全局的变量出现冲突

下面的例子是说明()的作用,()可以强制js片段执行
//方式1,调用函数,得到返回值。强制运算符使函数调用执行 
(function(x,y){ 
  alert(x+y); 
   return x+y; 
}(3,4));
//方式二,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用再去调用执行 
(function(x,y){ 
   alert(x+y); 
   return x+y; 
})(3,4); 

//arguments.callee([参数])被用于函数内部的递归调用,这种是匿名的递归函数
也可以使用命名的递归函数,如
function factorial (x) {
  if (x <= 1) {
    return 1;
  } else {
    return x * factorial(x-1);
}

}

function和new Function()的区别
var a = function (){alert(1)}
var b = new Function('alert(1)');//大写F
new Function()与new Array()相似,都是用javascript自带的功能返回一个function或者数组
所以上面a跟b是相同的,最终都是function
分享到:
评论

相关推荐

    js自调用匿名函数的三种写法(推荐)

    第一种: (function(){ console.log(‘hello world”) })() ...以上这篇js自调用匿名函数的三种写法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。

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

    定义一个函数用做临时的命名空间,在这个命名空间内定义的变量都不会污染到全局命名空间,需要的朋友可以参考下

    JS匿名函数、闭包

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

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

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

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

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

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

    以下是成功调用的匿名函数: 代码如下: (function () { alert&#40;3&#41;; }) (); (function f1() { alert&#40;4&#41;; })(); //不是匿名函数也能这样调用!! void function(){ alert&#40;‘void water’&#41;; }...

    JavaScript中匿名函数的递归调用

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

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

    本文实例分析了js中匿名函数的创建与调用方法。分享给大家供大家参考。具体实现方法如下: 匿名函数就是没有名字的函数了,也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数...

    初学者python笔记(匿名函数、map()函数、reduce()函数、filter()函数)

    本篇是对Python中的匿名函数和map()函数、reduce()函数、filter()函数...func1 = lambda x:x+1 #调用匿名函数第1步 func2 = lambda x,y:x*y #两个参数的匿名函数 print(func1(10)) #调用匿名函数第2步 print(func2(4,13

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

    好,看看匿名函数的如何被调用。 方式1,调用函数,得到返回值。强制运算符使函数调用执行 代码如下:(function(x,y){ alert&#40;x+y&#41;; return x+y; }(3,4)); 方式2,调用函数,得到返回值。强制函数直接量执行再...

    javascript笔记之匿名函数和闭包

    //匿名函数自执行 function(){ return function(){};//函数里的匿名函数 } [removed] 闭包 闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的常见的方式,就是在一个函数内部创建另一个函数,通过...

    jQuery源码分析-01总体架构分析

    1. 总体架构 1.1 自调用匿名函数 self-invoking anonymous function 打开jQuery源码,首先你会看到这样的代码结构: 代码如下: (function( window, undefined ) { // jquery code })(window); 1. 这是一个自调用匿名...

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

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

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

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

    Python程序基础:函数综合案例.pptx

    匿名函数并非没有名字,而是将函数名作为函数结果返回,其语法格式如下:;1.导入整个模块;2.导入特定的函数;3.导入模块中所有函数;在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件名。;Python...

    简体转繁体插件

    *@封装模式为自调用匿名函数(function(){})(); 这样的好处是开发不污染顶层变量,防止在项目中多人开发时函数重命名 *解释: var i = function(){ alert(xx);} ; i() ;与 (function(){ alert(xxx);})();是相同的 ...

    Python的lambda匿名函数的简单介绍

    lambda函数也叫匿名函数,即,函数没有具体的名称。先来看一个最简单例子:复制代码 ...很多人提出了质疑,lambda和普通的函数相比,就是省去了函数名称而已,同时这样的匿名函数,又不能共享在别的地方调用。其实说

Global site tag (gtag.js) - Google Analytics