2017-02-09 61 views
1

dev的问了我一个问题,他什么地方听说过,他说:为什么在函数定义时,闭包允许函数访问范围内的外部变量?

闭包允许函数在范围上,当函数定义

  • 访问外部变量

    1. 访问外部变量在范围上,当函数被调用
  • 答案是当FUNC定义。我试图围绕我的头:

    1. 为什么这件事。
    2. 你怎么知道或测试这个。

    我的问题是:如果在调用闭包时只能控制日志,那么如何知道闭包在定义范围时是否可以访问外部变量?我希望看到一些证明这一点的代码。

    第二个问题是:如果这是真的,闭包可以访问范围内的外部变量,那么这会给您带来什么好处?为什么这很重要?

    +0

    为什么“定义”和“被调用”之间的区别很重要,以及如何测试这种区别?或者是什么? – deceze

    +0

    它可以让你锁定私人词汇价值,提供安全性,轻松实现“假全球” – dandavis

    +0

    @dandavis“安全”...?反对什么? – deceze

    回答

    2
    function makeCallback() { 
        var foo = 'one'; 
    
        return function() { 
         alert(foo); 
        }; 
    } 
    
    function bar(callback) { 
        var foo = 'two'; 
        callback(); 
    } 
    
    bar(makeCallback()); 
    

    是差的问题在哪里。如果函数可以访问调用的范围中的变量,则会提醒“两个”。这被称为dynamic scoping。但是,由于Javascript使用词法范围,它实际上提醒“一个”。

    +0

    这是有道理的。您可能想要更新答案以使其更有意义。 – Johnston

    +1

    我已经删除了这个潜在的混淆点。现在它可能会令人困惑,因为关闭是令人困惑的,但是哦......) – deceze

    相关问题