gpt4 book ai didi

JavaScript 闭包与本地

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:34:02 26 4
gpt4 key购买 nike

我有一个 Javascript 主文件,它包含在一个立即调用的闭包中(以免污染“全局”:

(function () {
"use strict";
var closureVariable = [];
...
}());

我在从函数头中删除变量时犯了一个简单的、愚蠢的编码错误,以至于我的代码使用逗号而不是分号:

function fred () {
var i,

closureVariable = [1,2,3,4];
confused();
}
function confused () {
console.log(closureVariable); // Prints '[]'
}

当然,“var i”行中缺少的分号就是问题所在。然而,我认为应该发生的行为是我现在本地定义的变量“closureVariable”应该已经覆盖了更高级别的范围定义,并且我本地定义的变量的值应该可用于范围链中较低的函数(也就是说,函数“confused”应该打印出“[1,2,3,4]”;

我对这里的 Javascript 作用域链有什么不理解的地方?

最佳答案

您所期望的是动态范围界定。这是一个有效的语言设计选择,尽管今天被广泛认为是次等的。这不是 Javascript 所做的。与许多流行语言一样,Javascript 使用词法作用域。这意味着 confused 的范围不被视为 fred 的子范围,因为它的定义不在 fred 的定义内。 fred 调用 confused 的事实没有任何影响。

关于JavaScript 闭包与本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22017847/

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