gpt4 book ai didi

javascript - 为什么我做的这个Closure的内部函数无法访问外部函数的变量?

转载 作者:行者123 更新时间:2023-12-02 22:07:35 24 4
gpt4 key购买 nike

我试图了解闭包,这是以下代码:

var one = 1,
two = 2,
three = 3;

function bom(one, two, three) {
console.log(one, two, three);

function b(one) {
console.log(`From closure ${one}`);
};
b();

};

bom(1, 2, 3);

但是,内部函数无法访问外部函数变量。

谁能给我解释一下为什么吗?

谢谢。

最佳答案

@Pointy说的是正确的,你已经做了所谓的variable shadowingone 变量上,这意味着您基本上覆盖了对 b 函数作用域内的外部 one 变量的引用。它将引用其参数列表中定义的本地 one 变量。

话虽这么说,但这实际上不是闭包的示例,因为函数定义和调用上下文位于同一范围内。如果您返回函数 b 然后稍后执行它,这将是一个更好的闭包示例。这证明了 bom 作用域存在于 b 函数作用域的闭包内。

这是一个例子:

var one = 1,
two = 2,
three = 3;

function bom (one,two, three){
console.log(one,two,three);
return function b(){
console.log(`From closure ${one}`);
};
};

let myClosureFn = bom(1, 2, 3 );

myClosureFn();

关于javascript - 为什么我做的这个Closure的内部函数无法访问外部函数的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59669477/

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