gpt4 book ai didi

javascript - 回调函数、闭包和执行上下文

转载 作者:搜寻专家 更新时间:2023-11-01 05:11:41 24 4
gpt4 key购买 nike

function a(callback) {
var something = 10;

callback(something);
}

a(function(blabla) {
console.log(blabla); // output 10
});

好的,我理解这段代码没有问题。

我知道“某物”是函数a的局部变量,但是在闭包的意义上事实上调用函数时会创建执行上下文我希望遵循还工作:

function a(callback) { 
var something = 10;

callback();
}

a(function() {
console.log(something);
});

那么究竟发生了什么(为什么第二个例子不起作用)?
显然,所有内容都已被垃圾收集,并且在回调函数主体中不可访问。

最佳答案

在第二个示例中,局部变量 something 在您的回调主体中不可访问,不是因为它被垃圾收集了,而仅仅是因为它超出了范围。

考虑这个反例:

function a(callback) { 
callback();
}

var something = 10;

a(function() {
console.log(something);
});

此处 something 在定义回调主体时在范围内,因此您可以引用它。这样做会创建一个闭包。

也考虑一下这个:

function foo() {
var xyz = 1;
bar();
}

function bar() {
console.log(xyz);
}

这在功能上与您的示例相同:fooabar 是作为 callback 传入的匿名函数

为什么调用 bar() 会导致在此处打印 1?该变量在 foo 内的局部作用域内,而 bar 对此一无所知。

关于javascript - 回调函数、闭包和执行上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24119106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com