gpt4 book ai didi

JavaScript 习语 : create a function only to invoke it

转载 作者:可可西里 更新时间:2023-11-01 01:20:39 25 4
gpt4 key购买 nike

我在学习YUI偶尔看到这个成语:

 <script>
(function x(){ do abcxyz})();
</script>

为什么他们创建一个函数只是为了调用它?为什么不写:

<script>
do abcxyz
</script>

例如,参见 here .

最佳答案

他们正在利用 closures .

一个简短的解释:由于 JS 使用函数级作用域,您可以在函数内执行一系列操作并将其保留在该作用域中。这对于调用不会与全局命名空间混淆的代码很有用。它还允许创建私有(private)变量 - 如果您在匿名函数内声明一个变量并立即执行它,则只有匿名函数内的其他代码才能访问该变量。

例如,假设我想制作一个全局唯一 ID 生成器。一个人可能会做这样的代码:

var counter = 0;
var genId = function()
{
counter = counter + 1;
return counter;
}

但是,现在任何人都可以弄乱 counter,我现在用两个变量(countergenId)污染了全局命名空间.

相反,我可以使用匿名函数来生成我的计数器函数:

var genId = function()
{
var counter = 0;
var genIdImpl = function()
{
counter = counter + 1;
return counter;
}

return genIdImpl;
}();

现在,我在全局命名空间中只有一个变量,这是有利的。更重要的是,counter 变量现在不会被修改——它只存在于匿名函数的范围内,因此只有函数 genIdImpl(定义在同一范围内)可以访问它。

在 YUI 的示例代码中,他们只是想执行完全不污染全局命名空间的代码。

关于JavaScript 习语 : create a function only to invoke it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/698548/

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