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


Posted in Javascript onJanuary 26, 2016

Javascript中定义函数的方式有多种,函数直接量就是其中一种。如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数。好,看看匿名函数的如何被调用。

方式1,调用函数,得到返回值。强制运算符使函数调用执行

(function(x,y){
alert(x+y);
return x+y;
}(3,4));

方式2,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用再去调用执行

(function(x,y){
alert(x+y);
return x+y;
})(3,4);

这种方式也是很多库爱用的调用方式,如jQuery,Mootools。

方式3,使用void

void function(x) {
x = x-1;
alert(x);
}(9);

方式4,使用-/+运算符

-function(x,y){
alert(x+y);
return x+y;
}(3,4);
+function(x,y){
alert(x+y);
return x+y;
}(3,4);
--function(x,y){
alert(x+y);
return x+y;
}(3,4);
++function(x,y){
alert(x+y);
return x+y;
}(3,4);

方式5,使用波浪符(~)

~function(x, y) {
alert(x+y);
return x+y;
}(3, 4);

方式6,匿名函数执行放在中括号内

[function(){
console.log(this) // 浏览器得控制台输出window
}(this)]

方式7,匿名函数前加typeof

typeof function(){
console.log(this) // 浏览器得控制台输出window
}(this)

方式8,匿名函数前加delete

delete function(){
console.log(this) // 浏览器得控制台输出window
}(this)

方式9,匿名函数前加void

void function(){
console.log(this) // 浏览器得控制台输出window
}(this)

方式10,使用new方式,传参

new function(win){
console.log(win) // window
}(this)

方式11,使用new,不传参

new function(){
console.log(this) // 这里的this就不是window了
}

方式12,逗号运算符

function(){
console.log(this) // window
}();

方式13,按位异或运算符

^function(){
console.log(this) // window
}();

方式14,比较运算符

function(){
console.log(this) // window
}();

最后看看错误的调用方式

function(x,y){
alert(x+y);
return x+y;
}(3,4);

匿名函数的N种写法如下所示

匿名函数没有实际名字,也没有指针,怎么执行?

关于匿名函数写法,很发散~

+号是让函数声明转换为函数表达式。汇总一下

最常见的用法:

代码如下:

(function() { 
alert('water'); 
})();

当然也可以带参数:

代码如下:

(function(o) { 
alert(o); 
})('water');

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

代码如下:

(function(o) { 
console.log(o); 
return arguments.callee; 
})('water')('down');

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

代码如下:

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

代码如下:

void function(){ 
alert('water'); 
}();//据说效率最高~

代码如下:

+function(){ 
alert('water'); 
}();

代码如下:

-function(){ 
alert('water'); 
}();

代码如下:

~function(){ 
alert('water'); 
}();

代码如下:

!function(){ 
alert('water'); 
}();

代码如下:

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

以上给大家分享了Javascript中匿名函数的调用与写法,希望对大家有所帮助。

Javascript 相关文章推荐
jQuery 学习6 操纵元素显示效果的函数
Feb 07 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
Apr 05 Javascript
js拖拽一些常见的思路方法整理
Mar 19 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
Sep 01 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
Sep 09 Javascript
js实例属性和原型属性示例详解
Nov 23 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
Jul 08 Javascript
深入浅析JavaScript中数据共享和数据传递
Apr 25 Javascript
JavaScript字符串对象(string)基本用法示例
Jan 18 Javascript
利用node.js如何搭建一个简易的即时响应服务器
May 28 Javascript
Node.js实现发送邮件功能
Nov 06 Javascript
vue+iview分页组件的封装
Nov 17 Vue.js
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
Jan 26 #Javascript
JS组件Bootstrap Select2使用方法详解
Apr 17 #Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
Jan 26 #Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
Jan 26 #Javascript
基于JavaScript如何制作遮罩层对话框
Jan 26 #Javascript
基于Node.js实现nodemailer邮件发送
Jan 26 #Javascript
JavaScript小技巧整理篇(非常全)
Jan 26 #Javascript
You might like
PHP 常用的header头部定义汇总
2015/06/19 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
Javascript浅谈之this
2013/12/17 Javascript
理解javascript回调函数
2014/12/28 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
详解easyui基于 layui.laydate日期扩展组件
2018/07/18 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
python3实现暴力穷举博客园密码
2016/06/19 Python
Django中Model的使用方法教程
2018/03/07 Python
python 显示数组全部元素的方法
2018/04/19 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
Python3简单实现串口通信的方法
2019/06/12 Python
centos7之Python3.74安装教程
2019/08/15 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
python 伯努利分布详解
2020/02/25 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
意向书范本
2014/07/29 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
工程主管竞聘书
2015/09/15 职场文书
python_tkinter事件类型详情
2022/03/20 Python
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android