gpt4 book ai didi

javascript - 故意 "freezing"使用自执行函数的 javascript 变量

转载 作者:行者123 更新时间:2023-12-03 23:54:11 27 4
gpt4 key购买 nike

我正在阅读一篇博文 here关于用 node.js 创建一个刮板并遇到了一些有趣的 javascript,我无法完全理解。这正是我想在我的脚本中使用的东西,但作为一个新手,我不想在不知道它们首先做什么的情况下盲目地复制和粘贴代码。

在这个函数中:

function main()
{
var a = 1;
var f = function() { console.log(a); }
a = 2;
f();
}
main();

输出是2 ,因为 var af() 之前更改被称为。

但是,在这个函数中

function main()
{
var a = 1;
var f = ( function(a) { return function() { console.log(a); } } )(a);
a = 2;
f();
}
main();

输出是1 .在上面链接的博客文章中对此有相当详细的解释,但我终究无法弄清楚为什么会这样。

该帖子提到了 var a 的范围被传递到函数中——任何人都可以详细说明这意味着什么吗?为什么需要最后的 (a)var f 的末尾功能?

最佳答案

写成下面的样子你可能就明白了

function main()
{
var a = 1;
var f = ( function(b) { return function() { console.log(b); } } )(a);
a = 2;
f();
}
main();

这称为变量隐藏 - 通过用相同的名称命名函数的参数,我们将其隐藏在函数作用域之外。如果我们不隐藏变量,就像在我的例子中那样,代码是直截了当的——我们正在定义返回函数 (2) 的函数 (1),执行时返回的函数打印传递给函数 (1) 的值。我们将 a 的当前值传递给函数,因此生成的代码是

var f = ( function(b) { return function() { console.log(b); } } )(1);

var f = function() { console.log(1); }

关于javascript - 故意 "freezing"使用自执行函数的 javascript 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16910728/

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