当前位置: 首页 > 面试题库 >

什么是JavaScript中的(function(){})()构造?

邢寒
2023-03-14
问题内容

我曾经知道这是什么意思,但是我现在正在努力…

这基本上是在说document.onload什么吗?

(function () {

})();

问题答案:

它是立即调用的函数表达式,简称IIFE。它在创建后立即执行。

它与任何事件(例如document.onload)的事件处理程序无关。
考虑第一对括号中的部分:....它是一个正则函数表达式。然后查看最后一对,通常将其添加到表达式中以调用函数;在这种情况下,我们的先前表达。( **function(){}** )();``(function(){}) **()** ;

当试图避免污染全局名称空间时,通常使用此模式,因为IIFE内部使用的所有变量(如在任何其他 常规 函数中一样)在其范围之外都不可见。
这就是为什么您可能将此构造与的事件处理程序混淆的window.onload原因,因为它经常被用作:

(function(){
    // all your code here
    var foo = function() {};
    window.onload = foo;
    // ...
})();
// foo is unreachable here (it’s undefined)

Guffa建议的更正:

该函数在创建后立即执行,而不是在解析之后执行。在执行脚本块中的任何代码之前,都将对其进行分析。同样,解析代码并不会自动意味着它已被执行,例如,如果IIFE在函数内部,那么直到调用该函数后,它才会被执行。

更新 由于这是一个非常受欢迎的话题,值得一提的是,IIFE也可以使用ES6的arrow函数编写(就像Gajus 在评论中指出的那样):

((foo) => foo)('foo value')


 类似资料:
  • 问题内容: 有时我会创建一个函数,稍后再调用该函数。 例: 不知何故,某些功能无法调用。我必须在内部调用这些函数: 做什么和意味着,什么是这些区别/目的是什么? 问题答案: 只是jQuery的简写 它的设计目的(除其他事项外)是确保一旦页面的所有DOM元素准备就绪即可使用您的函数。 但是,我不认为这是您遇到的问题-您能否弄清楚“以某种方式,某些函数无法调用,而我必须在内部调用这些函数”的意思吗?也

  • 本文向大家介绍Javascript中的var functionName = function(){}和function functionName(){}有什么区别?,包括了Javascript中的var functionName = function(){}和function functionName(){}有什么区别?的使用技巧和注意事项,需要的朋友参考一下 functionDisplayOne

  • 本文向大家介绍javascript中的ribs.js的体系结构是什么?,包括了javascript中的ribs.js的体系结构是什么?的使用技巧和注意事项,需要的朋友参考一下 BackboneJS为Web应用程序提供了一种结构,该结构允许分离业务逻辑和用户界面逻辑。 BackboneJS的体系结构包含以下模块- HTTP请求 HTTP客户端以请求消息的形式向服务器发送HTTP请求,其中Web浏览器

  • 问题内容: 我刚刚开始编写jQuery插件。我写了三个小插件,但是我只是简单地将该行复制到我的所有插件中,而实际上并不知道这意味着什么。有人可以告诉我更多有关这些的信息吗?也许有一天写一个框架时会有用的解释:) 这是做什么的?(我知道它以某种方式扩展了jQuery,但是对此还有其他有趣的信息) 以下两种编写插件的方式有什么区别: 类型1: 类型2: 类型3: 我可能离这里很远,也许所有的意思都一样

  • 问题内容: 在此页面中,我找到了新的JavaScript函数类型: 我已经知道了什么,以及做的,但不知道什么是注定的。它是什么? 问题答案: 这是一个生成器功能。 生成器是可以退出并稍后重新输入的函数。它们的上下文(变量绑定)将在重新进入时保存。 调用生成器函数不会立即执行其主体。而是返回该函数的迭代器对象。调用迭代器的方法时,将执行生成器函数的主体,直到第一个表达式指定要从迭代器返回的值,或者使

  • 问题内容: 我正在调试一些JavaScript,无法解释它的作用? 有人可以给我一个提示,为什么这个人正在使用?我有时也看到它而没有声明。 问题答案: 这意味着该参数是可选的。因此,如果您不带任何参数调用该方法,则它将使用默认值。 它是写作的简写: 这种带有布尔表达式的速记技巧在Perl中也很常见。带有表达式: 它计算是否为或为。因此,如果为真,则完全不需要检查。这称为短路布尔评估,因此: 基本上