gpt4 book ai didi

Javascript - 自执行函数 : why to use them if I can create local scope with not self-executing functions?

转载 作者:行者123 更新时间:2023-11-28 11:47:10 25 4
gpt4 key购买 nike

我知道这里和其他地方有很多关于自执行函数的帖子,但在阅读帖子后我仍然有一些问题。

  1. 为什么我要将自执行函数分配给变量?无论如何,他们似乎都会处决自己。

    var myFunc=(function() {
    console.log('Hello World');
    })();
  2. 我读到很多关于使用自执行函数的原因是为了保持变量私有(private)。如果我有一个非自动执行的函数,那么我在该函数中定义的所有内容都将是私有(private)的?!

    (function() {
    var name="my Name"
    console.log(name);
    })();

    vs.

    function() {
    var name="my Name"
    console.log(name);
    };
    //its the same

所以我不太明白自执行函数如何保持局部作用域(因为你可以使用非自执行函数来做到这一点),所以我看到的唯一原因是当你想自动执行时使用它们,例如页面加载。

谢谢!

还有一个问题:

var test=(function myFunc(){
var name="Hello World"
return {
test1: function(){
return name;
},
test2:function(){
return name+"1"
}
}
})()

test.test1()

vs

var test=function myFunc(){
var name="Hello World"
return {
test1: function(){
return name;
},
test2:function(){
return name+"1"
}
}
}

test.test1()

--> 这里到底发生了什么,因为 IIFE 我实际上可以执行 test.test1() 而不是使用常规函数?

最佳答案

当您想要保留范围时,通常将函数包装在匿名函数中。这也是仍然非常流行的模块模式的一部分:

https://toddmotto.com/mastering-the-module-pattern/

然后您可以分配 IIFE 的结果到一个变量,这样你的作用域只能通过调用该变量来访问。

myScope.myLocallyScopedProperty or myScope[myLocallyScopedProperty]

您的其他函数需要手动调用,并且也可以从任何地方访问。

我建议阅读 Todd Moto 的文章,它解释了很多。

关于Javascript - 自执行函数 : why to use them if I can create local scope with not self-executing functions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46339735/

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