这两天在学习JS,学习到了匿名函数,和以前见过的函数的定义有很多不同,所以写此文章来探讨一下。
一、匿名函数
说道匿名函数,其实就是没有函数名的函数,通常只需要带一个()就可以被调用,实例如下:
function(){
alert("123");
//弹出警告“123”
}//匿名函数定义
(function(){
alert("123");
}())//匿名函数使用
【JS学习|匿名函数和字面量——JS学习】
var box=new function(){
alert('123');
}//匿名函数给一个对象box();
//执行匿名函数
以上三个代码框就是匿名函数的声明以及使用方法,具体来讲,和一般的函数也没有什么区别,加了括号就是可以执行的,他们还可以带参数:
var double = function(x) {
return 2* x;
}
但是他们和闭包,构造函数一起用起来就很是有用了。
二、字面量
什么是字面量呢,在js的代码中,他就是一个匿名函数的函数代表字符,作用是让一个对象很快的理清楚他的输出方法和功能结构。
定义对象的属性和方法:
A、传统方法
function objrun(){
return ‘123’;
}
var box = new Object();
box.name=’abc’;
box.age = 28;
box.run = objrun;
alert(box.run());
//结果为123
alert(box.run);
//结果为function objrun(){return ‘123’;
}
B、用字面量的方法
var box = {
name:’abc’,
age:28,
run:function(){
return ‘123’;
}
}
alert(box.run());
可见run这个属性就是调用的一个匿名函数来实现的输出,其实还可以在匿名函数里协商其他属性的内容方便调用和输出。
对象字面量的定义方式,可以轻松搞定函数大量参数需要一一对应输出的情况。他的对策就是给函数传入一个对象,而这个对象是用字面量的方式定义的,属性和值对应的方式可以一目了然他们的关系,因为函数只是一段代码,必须调用才能执行。
三、闭包
闭包的英文单词是closure,这是JavaScript中非常重要的一部分知识,因为使用闭包可以大大减少我们的代码量,使我们的代码看上去更加清晰等等,总之功能十分强大。
闭包的含义:闭包说白了就是函数的嵌套,内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕(这点涉及JavaScript作用域链)。
例子:
function(){
vara=0;
for(var i=0;
i<100;
i++){
function(){
a=a+1;
};
};
alert(a);
}//执行结果就是输出a的值为99
由于内层的匿名函数在for循环中一直执行,导致外层函数没有结束,所以a一直没有被释放,导致了a一直在加一,内层的这个函数就是一个闭包的存在。 匿名函数最大的用途是创建闭包(这是JavaScript语言的特性之一),并且还可以构建命名空间,以减少全局变量的使用。这里有一个地方需要注意,函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!
四、总结
看似一个小小的匿名变量,竟然有了这么多有趣,有用的用处,让我们的程序更加的优化,实在是不能够小瞧他的作用啊,匿名函数的应用应该不少,原型模式的实现多少也和他有些关系,所以对于以上三个概念的理解很是重要。
推荐阅读
- B/S与C/S架构的区别介绍
- 线程t1|线程t1,t2,t3 分别输出A,B,C 要求循环输出ABC 10次
- JS-Learning|数值转换之Number()、parseInt()和parseFloat()