gpt4 book ai didi

javascript - 我对费用变量绑定(bind)有些困惑

转载 作者:行者123 更新时间:2023-11-30 17:31:53 24 4
gpt4 key购买 nike

我已经阅读了一些关于 JS 范围的指南,但我不太明白这里发生了什么。

确实有效:

var b = 6;
function a(){
alert(b);
}
a(); //alerts 6

但是,这会让 Firebug 说“x is not defined”

var funcB = function(){
alert(x);
}

function funcA(anonymous){
var x = 10;
anonymous();
}

funcA(funcB);

那么为什么 funcB 中的自由 x 变量没有绑定(bind)到 funcA 第一行中声明为 10 的 x?

谢谢

最佳答案

JavaScript 中的每个函数都有自己的词法环境:其中使用的标识符(名称)与存在(在外部范围内)或将要存在的特定变量(和函数)之间的映射在此功能范围内创建。

关键是给定函数的词法环境是在定义该函数时创建的,而不是在执行时创建的。

在你的第二个例子中, funcB 中提到的 name x 没有任何映射到 - 没有名为 的变量x 在其自己的范围或父(外部)范围内。与第一个示例不同,b 可以映射到名为 b 的局部变量,与函数 a 存在相同的作用域。

当然,funcB 不能(也不应该)知道其他函数的词法环境,因为它不能(也不应该)知道它是否会从这些函数中调用 -还是不是。

关于javascript - 我对费用变量绑定(bind)有些困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22851008/

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