JavaScript/匿名函数和闭包
外观
匿名函数
[编辑]匿名函数是一种没有函数名的函数。 在 Javascript 中,有时我们定义函数为
function(){
//some code
}
这种定义经常出现在向某些函数传递回调函数的场景下,由于回调函数使用一次后就会销毁(离开调用者作用域),函数名就变得多余。
或者定义为
(function(){
//some code
})()
这种定义实际上定义了一个匿名函数且只执行一次, 主要用于提供局部变量的作用域 以上两种均为匿名函数
闭包
[编辑]闭包指的是函数的局部变量不与外界共享的语法特性。如下例:
var a=1;
function outerFunction(){
var a=2;
console.log("函数内的a=" + a);
}
outerFunction();
console.log("函数外的a=" + a);
输出:
函数内的a=2
函数外的a=1
之前提到过JavaScript中的函数也是对象,那么能不能将函数作为对象返回呢?答案是可以。
作为返回值的函数,可以将函数内部的值传递到外部。如下例:
var a=1;
function outerFunction(){
var a=2;
console.log("函数内的a=" + a);
return function(){
console.log("返回值函数访问的a=" + a);
}
}
var innerFunction=outerFunction();
innerFunction();
console.log("函数外的a=" + a);
输出:
函数内的a=2
返回值函数访问的a=2
函数外的a=1