gpt4 book ai didi

javascript - 关闭 JS Closures

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

a closure is the local variables for a function - kept alive after the function has returned.

我正在研究 JS 和 jQuery 闭包。根据上面的定义,我的理解是闭包允许访问函数外部的变量而无需需要创建全局变量,消除固有风险。我的解释正确吗?

一如既往的感谢。

最佳答案

通常你会认为,当你定义一个函数 foo 时,它唯一可能读/写的变量是你在调用函数时传递给函数的参数 foo(1, "hello"); 以及您定义的所有 global 变量。这就是类 C 语言的工作方式。

然而,在 JavaScript 中,您几乎可以在 任何地方 定义一个函数,除了全局变量和参数变量之外,该函数还可以在其父作用域中读取/写入变量;例如:

var global = "global";
function foo() {
var one = 1;
function bar() {
var two = 2;
function argh() {
}
}
}

函数 argh 将能够从其所有父作用域读取/写入变量,在本例中为 twooneglobal 都可以被函数 argh 访问。

我希望这能更好地解释什么是闭包——一旦您了解了作用域在 JavaSript 中的工作原理,它就不那么难了。闭包基本上只是能够访问当前和父作用域的内部函数...:)。

这是一个非常强大的概念,尤其是当你在做异步事情的时候。想象一下,您必须定义一个将在不同时间运行的函数:

// the function we defined below
// will run in 5 seconds in time
setTimeout(function(){

}, 5000);

如果 JavaScript 函数无法访问父作用域,我们将只能访问全局 变量。然而,对于 JavaScript,这要容易得多,我们可以使用所有可用的局部变量:

var foo = "some local variable";
setTimeout(function(){
alert(foo);
}, 5000);

关于javascript - 关闭 JS Closures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5792998/

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