闭包的简单示例

时间:2015-08-18 14:01:40

标签: javascript

有人能指出一个简单的例子来详细了解闭包吗?

以下链接http://www.kirupa.com/html5/closures_in_javascript.htm不明确。

感谢。

3 个答案:

答案 0 :(得分:0)

闭包是一个使用更高级别范围的引用的函数。

例如:

// Sorrounding scope
var a = "hello world";

var func = function() {
    // Function scope
    var b = a + " !!!!";
};

请参阅Closure (computer programming) on Wikipedia以了解有关深度闭合的更多信息。

答案 1 :(得分:0)

考虑以下

var noun = 'Governor';

var foo = (function () {
    var bar = 'Hello';
    // A
    return function () {
        var baz = 'Blake';
        console.log(bar, noun, baz);
        // B
    };
}());
// C
foo();
  • A行,哪些标识符可以参考? nounfoobar
  • 第B行,哪些标识符可以参考? nounfoobarbaz
  • 第C行,哪些标识符可以参考? nounfoo

现在继续思考,如果只有nounfoo可以在第C行引用,为什么值bar和{{1} } baz时出现?更具体地说,为什么foo()仍在那里?它甚至没有在我们被指定为bar的函数中定义。

foo

这是因为// remember, `foo` looks like this (log it to check for yourself) function () { var baz = 'Blake'; console.log(bar, noun, baz); // `bar` used but _not defined here_ // B } 闭包。其中包含标识符"" ,只要foo存在就会继续存在。

答案 2 :(得分:0)

这是一个定义变量number的函数,然后定义一个引用该变量的函数。即使外部函数已关闭,内部函数也会保留对number的引用。变量基本上位于口袋宇宙中,现在只有内部函数可以看到它。

(function(){
    var number = 0;
    window.count = function(){
        number = number + 1;
        console.log(number);
    };
})()

count();
// 1

count();
// 2

console.log(number);
// number is not defined