JavaScript匿名函数理解及应用[通俗易懂]

JavaScript匿名函数理解及应用[通俗易懂]匿名函数匿名函数顾名思义就是没有名字的函数,在实际开发中经常会用到,也是JavaScript的重点。匿名函数又叫立即执行函数。由于这种函数是匿名的,所以它不能被调用。由于它不能被调用,所以如果它不立即执行的话就没有了意义。由于它需要立即执行,所以在执行完之后匿名函数就会被销毁。匿名自执行函数的作用就是用于闭包和创建独立的命名空间两个方面。匿名函数的基本形式为(function(){…})();前面的括号包含函数体,后面的括号就是给匿名函数传递参数然后立即执行。匿名函数的作用是避免全局变量

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

Jetbrains全系列IDE稳定放心使用

在这里插入图片描述

匿名函数

匿名函数顾名思义就是没有名字的函数,在实际开发中经常会用到,也是JavaScript的重点。匿名函数又叫立即执行函数。


由于这种函数是匿名的,所以它不能被调用。
由于它不能被调用,所以如果它不立即执行的话就没有了意义。
由于它需要立即执行,所以在执行完之后匿名函数就会被销毁。
匿名自执行函数的作用就是用于闭包和创建独立的命名空间两个方面。


匿名函数的基本形式为(function(){…})();

前面的括号包含函数体,后面的括号就是给匿名函数传递参数然后立即执行。

匿名函数的作用是避免全局变量的污染以及函数名的冲突。


匿名自执行函数的作用

1.匿名自执行函数最常见的作用是用于实现闭包的情况中。
闭包:闭包是JavaScript的一种特性,我们可以通过闭包实现函数内外部的连接,并且可以使得函数的局部变量始终存在于内存中。

2.匿名自执行函数还可以用于在JavaScript中模拟创建块级作用域.
使用匿名自执行函数将某些代码包裹起来可以实现块级作用域的效果,减少全局变量的数量,在匿名自执行函数执行结束后变量就会被内存释放掉,从而也会节省了内存。


小括号
包着函数的小括号的作用:
小括号能把我们的表达式组合分块,并且每一块,也就是每一对小括号,都有一个返回值。这个返回值实际上也就是小括号中表达式的返回值。所以,当我们用一对小括号把匿名函数包起来的时,实际上小括号对返回的,就是一个匿名函数的Function 对象。因此,小括号对加上匿名函数就如同有名字的函数般被我们取得它的引用位置了。所以如果在这个引用变量后面再加上参数列表,就会实现普通函数的调用形式。

小括号有返回值,就是小括号内的函数或者表达式的返回值,所以小括号内的function返回值等于小括号的返回值。


写法
匿名函数的写法
1.先定义一个普通函数Cat()

function Cat(){ 
   

    alert("喵喵喵~~");
}

2.去掉函数的名字构建匿名函数
不包裹一个括号不符合语法要求,会报错!需要给匿名函数外边包裹一个括号才能运行。

(function (){ 
   

    alert("喵喵喵~~");
})()                        //()可省略

3.当匿名函数需要传值,将参数写到括号内

!(function (data){ 
   

    alert("喵喵喵~~"+data);
})("汪汪汪~~")

4种实现方式

//常见匿名函数:
            //1,匿名函数的第一种实现方式
    		(function(cat){ 
   
    			alert(cat);
    		})("喵喵喵~~");
    		//2.匿名自执行函数的第二种实现方式(常用)jQuery 
    		(function(){ 
   
    			alert("cat");
    		}());
    		//3.匿名自执行函数的第三种实现方式
    		!function(cat){ 
   
    			alert(cat);
    		}("喵喵喵~~");
    		//4.匿名自执行函数的第四种实现方式
    		var fun=function(cat){ 
   
    			alert(cat);
    		}("喵喵喵~~");
//不常见匿名函数:
            
			~(function(){ 
    
			
			alert('cat'); 
			})();
			//效率最高
			void function(){ 
    
			
			alert('cat'); 
			}();
					
			+function(){ 
    
			
			alert('cat'); 
			}();
			
			-function(){ 
    
			
			alert('cat'); 
			}();
			
			~function(){ 
    
			
			alert('cat'); 
			}();
			
			!function(){ 
    
			
			alert('cat'); 
			}();
			//强制执行
			(function(){ 
    
			
			alert('cat'); 
			}());


匿名函数的应用
1.绑定事件

<input type="button" value="点击" id="btn">

```javascript
var btn=document.querySelector("#btn");    //querySelector是H5中新增的查找dom元素的方法 btn.οnclick=function(){ 
   
    			alert("");
    		}

2.应用对象

var obj={ 
   

    animal:"汤姆猫",

    voice:"喵喵喵~~",

    CAT:function(){ 
   

        return "我是"+this.animal+",我会"+this.voice+"叫!";

    }

};

alert(obj.CAT());

3.应用函数表达式

//将匿名函数赋值给变量cat
var cat=function(){ 
   

    return "喵喵喵~~"
}
//调用方式与调用普通函数一样
alert(cat());

4、回调函数的应用

setInterval(function(){ 
   

    console.log("我是每5秒执行一次的回调函数");
},5000);

5、返回值

function cat(){ 
   
    //返回匿名函数
    return function(){ 
   

        return "喵喵喵~~";
    }
}
//调用匿名函数
alert(cat()());
//或
var mao=cat();
alert(mao());

6.链式调用

(function(animal) { 
    

alert(animal); 

return arguments.callee; 

})('cat')('dog')('pig');

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186161.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月4日 上午8:00
下一篇 2022年10月4日 上午8:16


相关推荐

  • Spring重试支持Spring Retry

    Spring重试支持Spring Retry第一步 引入 maven 依赖 dependencygr springframew boot groupIdartif boot starter web artifactId dependencyht mvnrepositor com artifact org springframew

    2026年3月19日
    2
  • 【机器学习】支持向量机原理及例题详解

    【机器学习】支持向量机原理及例题详解支持向量机(SVM)详解

    2022年10月8日
    6
  • 我国无线2.4g及5g信道-个人笔记

    我国无线2.4g及5g信道-个人笔记中国无线信道规划2.4G频段(2.412GHZ-2.472GHZ)信道中心频率频率范围01   2412  2401-242302   2417  2406-242803   2422  2411-243304   2427  2416-243805   2432  2421-244306   2437  2426-244807   2442  2431-245308   2447  2426-244809   2452  2441-246310   2457  24

    2022年6月1日
    128
  • iptables防火墙配置

    iptables防火墙配置实验 iptables 防火墙配置实验的目的熟悉防火墙的基本原理 熟悉包过滤防火墙的测试 实验内容 1 学习 Linux 防火墙的基本架构 2 学习 IPtable 的基本原理 3 学习 IPtable 的使用方法实验环境 1 虚拟机 Linux 主机 2 宿主机 Windows 客户端实验原理防火墙会按照从上到下的顺序来读取配置的策略规则 在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为 即放行或阻止 如果在读取完所有的策略规则之后没有匹配项 就去执行默认的策略 一般而言 防

    2026年3月17日
    2
  • pycharm 中的 run 和 debug 变灰失效 无法点击运行

    pycharm 中的 run 和 debug 变灰失效 无法点击运行nbsp nbsp nbsp nbsp pycharm 新建项目后 un 和 debug 按钮灰色问题 nbsp nbsp nbsp nbsp 原因不知道 每次打开后右下角有个进度条说是为所有文件建造索引 等他走完了就行了 nbsp nbsp nbsp nbsp 新建项目注意配置解释器 我不喜欢用一些集成环境 我觉得这样一个黑盒不习惯 一般只安装一个纯 python 要啥库安啥 接手别人用过的电脑真的糟糕 习惯不一样

    2026年3月26日
    0
  • 单工,半双工,全双工区别以及TDD和FDD区别

    单工,半双工,全双工区别以及TDD和FDD区别作为一名学通信的,居然对这个概念还是没搞清楚,兼职就是丢了大脸了!现在总结如下,理解比较浅,大部分网上查的,有不对的,请批评指正!单工,半双工,全双工区别单工单工就是指A只能发信号,而B只能接收信号,通信是单向的,就象灯塔之于航船——灯塔发出光信号而航船只能接收信号以确保自己行驶在正确的航线上。半双工指一个时间段内只有一个动作发生,举个简单例子,一天窄窄的马路,同时只能有一辆车通过,

    2022年6月12日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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