Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当定义函数时,闭包允许函数访问范围内的外部变量,这有什么关系?_Javascript - Fatal编程技术网

Javascript 当定义函数时,闭包允许函数访问范围内的外部变量,这有什么关系?

Javascript 当定义函数时,闭包允许函数访问范围内的外部变量,这有什么关系?,javascript,Javascript,一位开发人员问了我一个他在某处听到的问题,他说: 闭包允许函数 定义函数时访问范围内的外部变量 调用函数时访问作用域中的外部变量 答案是定义函数的时间。我正试着把我的头绕到: 为什么这很重要 你怎么知道或测试这个 我的问题是:如果在调用闭包时只能通过控制台记录,那么在定义闭包时,如何知道闭包可以访问作用域中的外部变量?我想看一些代码来证明这一点 第二个问题是:如果闭包可以访问作用域中的外部变量是真的,那么这会给您带来什么好处?为什么这很重要 function makeCallback() {

一位开发人员问了我一个他在某处听到的问题,他说:

闭包允许函数

  • 定义函数时访问范围内的外部变量
  • 调用函数时访问作用域中的外部变量
  • 答案是定义函数的时间。我正试着把我的头绕到:

  • 为什么这很重要
  • 你怎么知道或测试这个
  • 我的问题是:如果在调用闭包时只能通过控制台记录,那么在定义闭包时,如何知道闭包可以访问作用域中的外部变量?我想看一些代码来证明这一点

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

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

    这就是区别所在。如果函数可以从调用它的作用域中访问变量,这将向“2”发出警报。这被称为。但是由于Javascript使用词法范围,它实际上会提醒“一”。

    为什么“定义”和“调用”之间的差异很重要,以及如何测试这种差异?还是什么?它可以让你锁定私有词汇值,通过“psuedo globals”@dandavis“security”提供安全性…?反对什么?第二个可能应该是“…从调用函数的位置”。这似乎是对词法范围的引用。@deceze我理解调用和定义之间的区别,但我不知道你怎么知道函数在被调用之前具有访问权限,以及为什么这很重要。这是有道理的。您可能需要更新答案以使其更有意义。我已经消除了潜在的混淆点。现在它可能会让人困惑,因为闭包让人困惑,但哦,好吧…;)