为了账号安全,请及时绑定邮箱和手机立即绑定

在javascript中自执行函数的目的是什么?

在javascript中自执行函数的目的是什么?

在javascript中自执行函数的目的是什么?在javascript中,你想什么时候使用它:(function(){     //Bunch of code...})();对此://Bunch of code...
查看完整描述

3 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

简单化。看起来很正常,几乎让人感到安慰:

var userName = "Sean";console.log(name());function name() {
  return userName;}

然而。如果我在页面中包含一个非常方便的javascript库,将高级字符转换为基本级别表示,该怎么办?

等等......什么?

我的意思是。如果有人输入带有某种重音的角色(例如法语或西班牙语),但我只想要'英语'字符?Az在我的节目中?嗯......西班牙语'n~'和法语'e /'字符(我已经为这些字符使用了两个字符,但你可以在表达重音的字符中进行精神跳跃),这些字符可以被翻译成为'n'和'e'的基本字符。

所以有一个好人已经写了一个全面的字符转换器,我可以包括在我的网站...我包括它。

一个问题:它有一个名为'name'的函数,与我的函数相同。

这就是所谓的碰撞。我们在相同的范围内声明了两个具有相同名称的函数。我们想避免这种情况。

所以我们需要以某种方式确定代码的范围。

在javascript中扩展代码范围的唯一方法是将其包装在函数中:

function main() {
  // We are now in our own sound-proofed room and the 
  // character-converter libarary's name() function can exist at the 
  // same time as ours. 
  var userName = "Sean";
  console.log(name());
  function name() {
    return userName;
  }}

这可能会解决我们的问题。现在所有东西都是封闭的,只能在我们的开启和关闭支架内进行访问。

我们在函数中有一个函数......这看起来很奇怪,但完全合法。

只有一个问题。我们的代码不起作用。我们的userName变量永远不会回显到控制台!

我们可以通过在现有代码块之后添加对函数的调用来解决此问题...

function main() {
  // We are now in our own sound-proofed room and the 
  // character-converter libarary's name() function can exist at the 
  // same time as ours. 
  var userName = "Sean";
  console.log(name());
  function name() {
    return userName;
  }}main();

或之前!

main();function main() {
  // We are now in our own sound-proofed room and the 
  // character-converter libarary's name() function can exist at the 
  // same time as ours. 
  var userName = "Sean";
  console.log(name());
  function name() {
    return userName;
  }}

次要问题:“主要”这个名称还没有被使用的可能性有多大?......非常非常苗条。

我们需要更多的范围。以及一些自动执行main()函数的方法。

现在我们来到自动执行功能(或自动执行,自运行,等等)。

((){})();

语法像罪一样尴尬。但是,它的工作原理。

当您将函数定义包装在括号中并包含参数列表(另一组或括号!)时,它将充当函数调用

所以让我们再看一下我们的代码,使用一些自动执行的语法:

(function main() {
  var userName = "Sean";
    console.log(name());
    function name() {
      return userName;
    }
  })();

因此,在您阅读的大多数教程中,您现在将使用“匿名自执行”或类似的术语进行轰炸。

经过多年的专业开发,我强烈建议您为调试目的命名您编写的每个函数

当出现问题时(它会出现问题),您将在浏览器中检查回溯。它总是更容易缩小你的代码的问题时,在堆栈跟踪中的条目有名字!

非常啰嗦,我希望它有所帮助!


查看完整回答
反对 回复 2019-05-28
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

自调用(也称为自动调用)是函数在定义时立即执行的。这是一个核心模式,是许多其他JavaScript开发模式的基础。

它是一个伟大的粉丝:)因为:

  • 它将代码保持在最低限度

  • 它强制将行为与表达分开

  • 它提供了一个阻止命名冲突的闭包

极大 - (为什么你应该说它好?)

  • 它是关于一次定义和执行一个函数。

  • 您可以让该自执行函数返回一个值,并将该函数作为参数传递给另一个函数。

  • 封装很有用。

  • 它也适用于块范围。

  • 是的,您可以将所有.js文件包含在自执行功能中,并可以防止全局命名空间污染。;)

更多这里


查看完整回答
反对 回复 2019-05-28
  • 3 回答
  • 0 关注
  • 2490 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信