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我理解调用和定义之间的区别,但我不知道你怎么知道函数在被调用之前具有访问权限,以及为什么这很重要。这是有道理的。您可能需要更新答案以使其更有意义。我已经消除了潜在的混淆点。现在它可能会让人困惑,因为闭包让人困惑,但哦,好吧…;)