js中创建和调用匿名函数的方法分析
本文分析了JS中创建和调用匿名函数的方法,供大家参考,具体实现方法如下:匿名函数是一个没有名称的函数,也称为闭包,它允许临时创建一个没有指定名称的函数。最常用的是回调参数的值,许多新手朋友不理解这个匿名函数。
函数函数名(参数列表){函数体;}
如果要创建一个匿名函数,应该是:
函数(){函数体};}
因为它是一个匿名函数,它通常没有一个参数传递给他。
为什么要创建匿名函数在这种情况下,使用匿名函数。匿名函数有两种常用的方案,一种是回调函数,两种是直接执行函数。
回调函数与Ajax的异步操作一样,需要回调函数,这里没有详细的解释。
复制代码代码如下所示:
var;
(函数(){())
var;
警报(a);
});
警报(a);
在这个代码中,按顺序输出两个警告框。第一个警告框是B,第二个是A。你看到什么好东西了吗是的,直接使用函数来执行可以限制变量的范围,以便不同脚本的相同变量可以共存。
接下来,我们先来了解与匿名函数相关的概念。
函数声明(函数语句),为了使用函数,我们必须首先声明它的存在。我们最常用的方法是使用函数语句来定义函数,例如:
复制代码代码如下:函数abc(){
处理代码
}
函数abc(to){过程代码
当然,您的函数也可以是一个参数,甚至返回值。
复制代码如下:视图plaincopy到clipboardprint
函数abc(x,y){
返回x y;
}
函数abc(x,y){返回x;y;}
然而,不管您如何定义函数,js解释器将其转换为一个函数对象:
复制代码如下:警报(typeof ABC); / / 功能
你的浏览器会弹出提示框,提示你ABC是一个函数对象,那么函数对象到底是什么呢
函数对象
函数对象是Javascript中的一个固有对象,所有函数实际上都是一个函数对象,让我们看看函数对象是否可以直接使用构造函数创建一个新函数,答案是肯定的:
复制代码如下:var abc =新函数( x
警报(abc(2,3)); 6
我相信您现在已经知道如何声明一个函数了,那么什么是匿名函数呢
声明匿名函数
顾名思义,一个匿名函数是一个没有真实名称的函数,例如,让我们去掉上面例子中函数的名称,然后判断他是否是一个函数。
复制代码如下:警报(typeof(功能){ }); / / 功能
警报(typeof函数{ return x + y(x,y);}); / / 功能
警报(typeof新功能(X
警报(typeof(功能){ }); / / 功能
警报(typeof函数{ return x + y(x,y);}); / / 功能
警报(typeof新功能(X
我们可以很容易地看到它们都是函数对象,换句话说,它们都是函数,但是它们都有一个特性——没有名字,所以我们称它们为匿名函数。但是,因为它们没有名字,我们无法找到它们。这扩展了如何调用匿名函数的问题。
匿名函数的调用
要调用一个函数,我们必须有一个方法来定位它并引用它,因此我们需要为它找到一个名称:
复制代码代码如下:var abc =函数(x,y){
返回x y;
}
警报(abc(2,3)); 5
上面的操作实际上与我们经常遇到的函数定义方式相等,例如,当我们建立一个DOM元素事件处理函数时,我们通常不给它们命名,而是给它们相应的事件一个匿名函数。
还有另一种调用匿名函数的方法。这就是我们看到的jQuery片段。我们使用()将匿名函数括起来,然后添加一对括号(包括参数列表)。
复制代码如下:警报((函数(x,y){返回x;y;})(2,3));5
(新函数()x
很多人可能想知道为什么这种方法可以成功地被调用。
你知道括号的作用吗圆括号可以阻断我们的表达式的组合,每一片,即每一对括号,有返回值,返回值是表达式的括号中的返回值,所以当我们把匿名函数的一对圆括号,括号,其实回到他们的函数对象的一个匿名函数。因此,括号加一个匿名函数是一个函数,有一个名字,我们可以参考的位置。所以,如果参数列表的引用变量加入后,普通的函数调用形式会实现。
我不知道你是否能看到上面的文字。如果您不能理解,请查看下面的代码。
复制代码如下:var =函数(x,y){返回x;y;};匿名函数对象被分配给abc。
构造函数作为一个匿名函数,也就是说,两个函数的实现是相同的。
警报((abc)。构造函数= =(函数(x,y){返回x,y,})。构造函数);
ps:构造函数是创建对象的函数,也就是函数对象表示的函数体。
简而言之,它被解释为一个由括号括起来的匿名函数,然后可以称为这个函数对象的常规参数列表。只有函数表达式不能直接调用函数,并删除匿名函数。括号必须伴随着表达式的赋值,即(函数())警报(1)}()()应该等价于a函数(){警报(1)}()}(),甚至不能从a删除)。
关闭
关闭是什么关闭代码在程序语言的块,使第一级功能存在,和自由变量定义在第一级功能不能直到第一层次的功能是释放,这些释放变量也可以应用在第一级功能。
好吗看到一头汗......没事,我(虽然我知道,这只是一个表达能力的问题)。让我们换个方法更简单:封闭,是一种语言的特征,它是指编程语言,允许将函数作为对象,然后在对象在函数定义中像操作实例(局部)变量,而这些变量在函数保存销毁函数实例,其他代码块可以以某种方式得到这些实例(局部)变量的值和应用扩展。
我不知道如果我再解释清楚会不会更清楚。如果我们仍然不理解它,那么我们可以进一步简化它:闭包实际上是一种编程语言,允许代码调用运行函数中定义的局部变量。
现在让我们看一个例子:
复制代码代码如下:var abc =函数(y){
这是一个局部变量。
返回函数(){
警报(x + +);这里称为x闭包属性中局部变量的主要函数,并操作它。
警报(y);引用变量和自由变量
}(5);
(abc);55
(abc);64
(abc);73
警报(x); /错误!X的定义!
看看这里,你能判断jQuery的代码片段是否已经关闭了吗
根据我的理解,是否应用闭包特性,必须确定段代码是否具有最重要的元素:一个没有被破坏的局部变量,所以很明显,没有一个匿名函数的实现不能应用闭包功能,但是如果在匿名函数中有一个实现该怎么办呢它还必须确保在执行中没有使用任何本地变量。如果您在开放式中请求jQuery代码片段,js中的特性是什么然后它只是一个匿名函数和一个匿名函数调用,但是它包含闭包的特性,并且可以随时实现。
最常用的用法:
复制代码代码如下:(函数(){)
警报(水);
});
当然,你也可以选择参数:
复制代码代码如下:(函数(o){)
警报(o);
})(水);
想要使用匿名函数链吗这是简单uff1a
复制代码代码如下:(函数(o){)
警报(o);
返回arguments.callee;
})(水)(Down');
常见的匿名函数是已知的,看起来很少见。
复制代码如下:(函数(){())
警报(水);
})。
空函数(){
警报(水);
据说()。
+函数(){
警报(水);
(});
-函数(){
警报(水);
(});
函数(){
警报(水);
(});
函数(){
警报(水);
(});
(函数(){())
警报(水);
());
希望本文能对大家的javascript程序设计有所帮助。