JS匿名函数的用法
JS匿名函数的用法
JS匿名函数的用法
一、在Javascript定义一个函数一般有如下三种方式:
函数关键字(function)语句:
function fnMethodName(x){alert(x);}
函数字面量(Function Literals):
var fnMethodName = function(x){alert(x);}
Function()构造函数:
var fnMethodName = new Function('x','alert(x);')
上面三种方法定义了同一个方法函数fnMethodName,第1种就是最常用的方法,后两种都是把一个函数复制给变量fnMethodName,而这个函数是没有名字的,即匿名函数。实际上,相当多的语言都有匿名函数。
二、函数字面量和Function()构造函数的区别
1. 虽然函数字面量是一个匿名函数,但语法允许为其指定任意一个函数名,当写递归函数时可以调用它自己,使用Function()构造函数则不行。
var f = function fact(x) {
if (x < = 1) return 1;
else return x*fact(x-1);
};
2. Function()构造函数允许运行时Javascript代码动态的创建和编译。在这个方式上它类似全局函数eval_r()。
3. Function()构造函数每次执行时都解析函数主体,并创建一个新的函数对象。所以当在一个循环或者频繁执行的函数中调用Function()构造函数的效率是非常低的。相反,函数字面量却不是每次遇到都重新编译的。
4. 用Function()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。
var y = "global";
function constructFunction() {
var y = "local";
return new Function("return y"); // 无法获取局部变量
}
alert(constructFunction()()); // 输出 "global"
和函数关键字定义相比Function()构造器有自己的特点且要难以使用的多,所以这项技术通常很少使用。而函数字面量表达式和函数关键字定义非常接近。
三、匿名函数的代码模式
1. 函数字面量:首先声明一个函数对象,然后执行它。
(function(){
alert(1);
} ) ( );
2. 优先表达式:由于Javascript执行表达式是从圆括号里面到外面,所以可以用圆括号强制执行声明的函数。
( function(){
alert(2);
} ( ) );
3. Void操作符:用void操作符去执行一个没有用圆括号包围的一个单独操作数。
void function(){
alert(3);
}()
- extjs column列布局
- vueelementui动态表格(Vue Element前端应用开发之常规的JS处理函数)
- js获取微信版本号
- js宏任务都有哪些(JavaScript 操作宏任务与微任务)
- 用js编写tab栏切换(JavaScript实现简易tab栏切换内容栏)
- nodejs json文件读写(nodejs将JSON字符串转化为JSON对象报错的解决)
- python将对象转换成json(python对象与json相互转换的方法)
- vue怎么定义router的动态路由(vue.js Router中嵌套路由的实用示例)
- python pdf文件操作(Python常见读写文件操作实例总结文本、json、csv、pdf等)
- pythonjson库(Python常用的json标准库)
- vue切换图片效果(Vue.js实现图片切换功能)
- extjs中treegrid
- js如何将json字符串转换为json对象
- sqlserver常见函数(SQL Server之JSON 函数详解)
- js三级联动说明(基于JavaScript实现省市联动效果)
- js绘制平滑路径(如何利用Javascript生成平滑曲线详解)
- 菲律宾安全吗(菲律宾安全吗)
- 泰国旅游攻略(泰国旅游攻略必去景点)
- 数字藏品市场有多乱 周杰伦丢了 一只猴 ,损失超300万(数字藏品市场有多乱)
- 这里输入关键词(怎么输入关键词搜索)
- 得这个 难治病 的人太多了,300个人赶到杭州商量怎么办(得这个难治病的人太多了)
- 经度,世界时间腕表的灵魂(世界时间腕表的灵魂)
热门推荐
- uniapp 动态表单(详解uniapp无痛刷新token方法)
- docker镜像大是否会导致启动慢(docker下载镜像太慢的解决方案)
- docker容器启动自动执行命令(docker run 运行容器自动结束的解决)
- python读取文件怎么用(Python基础之文件读取的讲解)
- 租用云服务器注意事项(怎么租用到性能过硬的美国云服务器)
- 如何编写docker-compose(使用Docker Compose搭建 Confluence的教程)
- nginx怎么设置域名访问网页(Nginx服务器如何设置url链接)
- nginx优化安全设置(nginx优化的六点方法)
- iis服务器如何设置多个网站(云服务器怎么设置404页面IIS7)
- php开发各种问题(解决php extension 加载顺序问题)