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