javascript中闭包的概念

    在JS中,不存在其他语言中的大括号级的作用域,但它有函数作用域,若想访问函数内部的局部变量,可以在函数内部声明一个函数,用来返回函数内部的局部变量。

如下例:

   

var a=5;;
function f1() {
    var a=1;
    function f2() {
        alert(a);
    }
    return f2();
}
a;
=>5
f1();
=>1

    由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

    可有以下几种闭包:

    闭包#1:

  

function f() {
    var b = 'b';
    return function () {
        return b;
    }
}
var n = f();
n();
=>'b'

    闭包#2:

var n;
function f() {
    var b = 'b';
    n = function () {
        return b;
    }
}
n();
=>'b'

    闭包#3:

   

function f(arg) {
    var n = function () {
        return arg;
    }
    arg++;
    return n;
}
var m = f(123);
m();
=>124

 闭包#3中n被赋值时函数并没有被调用,调用是在n被求值,也就是执行return n;语句时被调用的。

猜你喜欢

转载自553570934.iteye.com/blog/2303192