javascript 匿名函数_匿名函数lambda

javascript 匿名函数_匿名函数lambda你必须知道的JavaScript匿名函数以及多种匿名函数的写法,本文还将详解为什么匿名函数会自动执行,这也是Jquery库的原理哦~~~

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用
匿名函数没有实际名字,也没有指针,怎么执行滴? 
其实大家可以看看小括号的意义就应该可以理解。小括号有返回值,也就是小括号内的函数或者表达式的返回值,所以说小括号内的function返回值等于小括号的返回值,不难理解 (function(){})()可以将没有名字的函数执行了把… 
关于匿名函数写法,很发散~ 
最常见的用法: 

代码如下:

(function() { 
alert(‘water’); 
})(); 


当然也可以带参数: 

代码如下:

(function(o) { 
alert(o); 
})(‘water’); 


想用匿名函数的链式调用?很简单: 

代码如下:

(function(o) { 
alert(o); 
return arguments.callee; 
})(‘water’)(‘down’); 


常见的匿名函数都知道了,看看不常见的: 

代码如下:

~(function(){ 
alert(‘water’); 
})();//写法有点酷~ 


代码如下:

void function(){ 
alert(‘water’); 
}();//据说效率最高~ 
这里补充一下为什么加void效率会比较高
这是因为加void就相当于定义了该函数的原型,搜索该函数的时候就可以直接找到,不用大面积搜索,因此会比较快!这是我在群里问得到的解析,加上自己的理解,欢迎不同见解!


代码如下:

+function(){ 
alert(‘water’); 
}(); 


代码如下:

-function(){ 
alert(‘water’); 
}(); 


代码如下:

~function(){ 
alert(‘water’); 
}(); 


代码如下:

!function(){ 
alert(‘water’); 
}(); 


代码如下:

(function(){ 
alert(‘water’); 
}());//有点强制执行的味道~ 



那为什么加上这些符号呢?
弄清这个问题需要弄清函数表达式(function expression)和函数声明(function declaration)的区别:


函数表达式:

/* 函数表达式中的函数可以为匿名函数,也可以有函数名,但是该函数实际上不能直接使用,只能通过表达式左边的变量 a 来调用。*/

var a = function(){

alert(‘Function expression’);

}

var b = new a();

函数声明:

// 函数声明时必须有函数名

function a(){

alert(‘Function declaration’);

}

a();

而这段代码:

<script> 


~function() { 
alert(“hello, world.”); 
}
 
()

</script>

实际上可以分为两个部分(黑体部分和斜体部分)。黑体部分的匿名函数通过一元操作符变成了函数表达式,因而可以通过 () 来调用。




因此,执行匿名函数可以通过+,-,!,() 这样的形式来转化为函数表达式,就可以通过()来运行了。




匿名函数的好处在于:可以减少局部变量,以免污染现有的运行环境。jQuery等库都用到了这样的原理。


另外:通过+,-,!这三个符号运行的匿名函数比()运行的匿名函数可以减少一个字符的使用。

所以那些匿名函数附近使用括号或一些一元运算符的惯用法,就是来引导解析器,指明运算符附近是一个表达式。
按照这个理解,可以举出五类,超过十几种的让匿名函数表达式立即调用的写法

( function() {}() );
( function() {} )();
[ function() {}() ];

~ function() {}();
! function() {}();
+ function() {}();
- function() {}();

delete function() {}();
typeof function() {}();
void function() {}();
new function() {}();
new function() {};

var f = function() {}();

1, function() {}();
1 ^ function() {}();
1 > function() {}();
// ...

本文到此结束!


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/186439.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 十大滤波算法总结

    十大滤波算法总结由于MPU6050的深入,我也学会了一些滤波算法,自己写了一些算法,收集了一些算法,供大家一起学习分享,我的代码都是经过反复试验,复制到Arduino中就能开跑的成品代码,移植到自己的程序中非常方便。而且都仔细研究了各个算法,把错误都修正了的,所以也算个小原创吧,在别人基础上的原创。1、限幅滤波法(又称程序判断滤波法)2、中位值滤波法3、算术平均滤波法4、递推平均滤波法(又称滑动平

  • 关于gitlab Web IDE功能使用

    关于gitlab Web IDE功能使用gitlabWebIDE使用1,进入gitlab项目路径,可以看到有个WebIDE按钮2,点击WebIDE按钮,跳到下面的界面 2.1.在这里可以建新的文件夹或者文件。 2.2.选中新建的文件夹newfoldr,点击右边的按钮,选择上传文件, 2.3.点击commit 2.4.下面要选择合并到master分支。(如果你们需要每个人需要创建新的分支去合并到 master分支,也可以选下面的createanewbranch)。再点击commit

    2022年10月17日
  • ubuntu 强制删除文件夹[通俗易懂]

    ubuntu 强制删除文件夹[通俗易懂]sudorm文件夹的名称-rf输入Ubuntu的密码

  • 记一次kubernetes Evicted的处理[通俗易懂]

    记一次kubernetes Evicted的处理[通俗易懂]背景:事情这样的:kubernetes1.21.3集群。容器运行时containerd。除了K8s-node-06节点。保留这个docker节点有很多原因。比如当时没有想好用什么打包镜像。默认让jenkins打包镜像。还有就是我的gitlab10.8.7版本contarinerd运行时下无法启动。就保留了这个节点运行gitlabpod。当然了也把这个节点设置为了不可调度。不相其他应用调度到这个节点上来!最近一段时间gitlab应用频繁出现Evicted的问题:这样就陷入了一个死循环:我的k8s-

  • mac全选文字的快捷键_关于mac文本的快捷键你知道多少?[通俗易懂]

    mac全选文字的快捷键_关于mac文本的快捷键你知道多少?[通俗易懂]用惯了windows系统的小伙伴,对于苹果的快捷键一定很不习惯。所以贴心的小编为大家准备了关于mac打字的快捷键你知道多少?用习惯了苹果的快捷键也是非常好用的哦!在电脑的操作过程中,快捷键是非常主要的,为您节省了很多不必要的时间,提高了工作的效率,下面就和小编一起来看一看有哪些好用的快捷键吧!关于mac的快捷键你知道多少?:cmd+c。复制cmd+v。粘贴cmd+a。全选cmd+tab。切换程序s…

  • java.nio.Buffer 中的 flip()方法

    java.nio.Buffer 中的 flip()方法

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号