gpt4 book ai didi

javascript - 为什么被调用函数中的参数必须有其他 "names"而不是调用它的参数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:39:44 24 4
gpt4 key购买 nike

函数方 block 中的形参或自变量(我不知道哪个是正确的)是“y”,但在for循环中是“x”。为什么程序必须复制“x”并将其称为“y”?它也适用于“x”(我试过)并且代码工作正常。那为什么还要麻烦呢?这对我来说更有意义,因为我是 JS 的新手,所以要保持名称相同。谁能解释一下?

document.writeln("<h1>Square the numbers from 1 to 10</h1>");

for (var x = 1; x <= 10; ++x)
document.writeln("<p>The square of " + x + " is " + square(x) +
"</p>");

function square(y) {
return y * y;
} //end


//This works too:
// function square(x) {
//
// return x * x;
// }

最佳答案

这是所谓的 "scope" in Computer Science 的结果.

在 JavaScript 中,范围由其封闭的 "Execution Contexts" ECMA 定义。 ,其设计类似于 stack of cards .

实际上,这意味着存在名称引用内存位置的区域。您的编码示例突出显示了一个场景,其中两个不同的内存位置使用相同的名称引用,因为它们位于不同的区域。

在 JavaScript 中,为不同的名称引用创建这些区域之一的一种方法是使用函数。在函数内部,新名称将优先于外部名称。

因此,当您遇到以下情况时:

for ( var x = 1; x <= 10; ++x ){
square(x);
}
function square(x){
return x * x;
}

这里令人困惑的部分主要是两个地方使用了相同的变量名称。

函数内部的x变量其实是在自己的名字引用区。在该区域内,x 现在引用 x 的参数值,而不是任何其他值。

从更技术的 Angular 来看,有一个执行上下文当前正在执行 for 循环内部的代码。它包含一个内存环境,其中有一个 x 条目。当 square(x) 被调用时,它使用该值传递给函数 square 的执行上下文。在 square 的执行上下文中,还有一个内存环境。该内存环境包含函数参数的条目,也称为 x。请注意,内存位置不同,因为有两个不同的执行上下文和两个不同的内存环境。

实际上,从技术 Angular 来看,不需要不同的名称。然而,从可读性的 Angular 来看,它很难阅读,这使得程序以后更难构建。

至于为什么这样做,是因为内存管理和执行效率。有一种称为“垃圾收集”的机制,它会在可以(有空闲处理器时间)时运行,以删除未使用的内存。该内存在超出范围时被确定为未使用(这就是执行上下文很重要的原因)。此外,在查找变量值的过程中,从一个小区域开始然后向外扩展可以使查找速度更快。这是在幕后使用范围界定的两个主要原因。

关于javascript - 为什么被调用函数中的参数必须有其他 "names"而不是调用它的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57615371/

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