为什么 JavaScript 函数调用要用括号括起来? [复制]

2024-04-14

这两个 javascript 函数调用有什么区别?

(function(){alert("foo")})()

与此相比:

(function(){alert("foo")}()) 

这样做是为了可读性。

您给出的两个示例之间没有真正的功能差异,但它们都非常接近简单的函数声明,is不同的。添加括号是为了提高可读性,以便区分它们。

以下是每个片段的作用:

在两个片段的第一个片段中,第一个括号将被计算为所包含函数的值。然后这个值将被作为函数调用。所以最终该函数将被执行,这可能是您关心的。

在第二个代码片段中,外括号将被评估为包含声明为内联并立即执行的函数。同样,该函数将被执行,这可能仍然是您关心的。

这两者都将执行相同的功能,因此不会有任何显着差异。

像您这样的代码片段和简单的函数声明之间的区别:

您提供的功能也与以下功能相同。我刚刚添加了一个函数名称并分配了返回值以保证语法准确性,您现在可以忽略它。

// javascript...
var val = 
  function myFooFunc () { 
    alert("foo"); 
  }();

然而,这很容易被误认为是简单的函数声明,这是不同的:

// javascript...
function myFooFunc () { 
  alert("foo"); 
}

请注意,这里唯一真正的区别是最后一个函数声明不会立即执行。其他人都是。因此,这是一种非常不同的行为(如果按名称调用,则简单声明可能会稍后执行,或者可能根本不会执行)。然而,通常很难立即看出语法上的差异,特别是当函数体变得非常长并且需要在屏幕上滚动时。

为什么函数会立即执行?

当一个函数在声明后立即执行时,该值通常会被返回到某个东西(它可能是赋值语句的一部分)。有时该函数会立即执行,因为它包含内部函数并用于为封闭的语句提供功能范围。

本质上,人们用括号括住“立即执行”形式(您的两个片段,以及我的两个片段中的第一个),以便向其他开发人员提供该函数正在立即调用的视觉提示。它只是更容易阅读,因为您可能直到到达函数末尾(或根本注意到它们)才看到括号。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 JavaScript 函数调用要用括号括起来? [复制] 的相关文章

  • 页面在 Google Adwords 转化跟踪上重定向

    我有一个表单 人们可以在其中提交数据 然后使用 ajax 将数据发送到服务器 我已将其设置为 Google Adwords 中的转化 下面是我使用过的代码 问题是 当用户提交表单时 在收到响应后 它会重定向回我给出的 URL 我不想重定向
  • 如何检测被覆盖的 CSS 属性?

    I can get all css properties for an element with document stylesheets but some of those are not active because those pro
  • 在 onclick 事件上请求麦克风

    有一天 我偶然发现了这个 Javascript 录音机的例子 http webaudiodemos appspot com AudioRecorder index html http webaudiodemos appspot com Au
  • javascript:全局变量泄漏

    每当我向 Firefox 提交插件时 我都会收到一封电子邮件 告诉我我的一些变量正在泄漏到全局范围内 一旦他们告诉我我解决了问题 但在那之前有什么方法 程序 来检查变量是否泄漏到全局范围内 Thanks Both JSLint http w
  • 如何使用 JavaScript 刷新页面?

    如何使用 JavaScript 刷新页面 Use location reload https developer mozilla org en US docs Web API Location reload 例如 每当元素带有以下内容时重新
  • 需要使用 iFrame API 隐藏 YouTube 品牌

    我正在使用 YouTube iFrame API 在我的自定义播放器 javascript 播放器 中加载视频 我需要隐藏 Youtube 品牌 但是在 iOS 设备上 它显示带有以下参数的徽标 playerVars fs 1 autopl
  • 在 JavaScript 函数中加载图像

    我有获取图像像素颜色的功能 function getImage imgsrc var img img src imgsrc var imageMap new Object img load function var canvas
  • Dialogflow Fulfillment Webhook 调用失败

    I am new to dialogflow fulfillment and I am trying to retrieve news from news API based on user questions I followed doc
  • Visual Studio 改变 Ctrl-K-D 的工作方式

    In Visual Studio I m using 2012 is there any way of editing the way that Ctrl K D combinations handles its Auto Formatti
  • 如何设置必须输入特定数字的字段?

    我想知道如何创建一个需要输入特定数字或文本的字段 例如 激活码 以及在输入的确认答案的情况下移动到 网页 并且在未确认的情况下移动到 另一页面 的按钮 使用必需的属性
  • 如何调试超时等待异步 Angular 任务?无法在角度页面上找到元素

    编辑 请注意 在 ernst zwingli 的帮助下 我找到了问题的根源 因此 如果您遇到相同的错误 他指出的修复之一可能会帮助您 我的问题是量角器本身的一个已知问题 如果您认为这可能是您 我已经扩展了我的步骤 以在我最初的问题之后查明问
  • 为什么函数声明在不同浏览器中的处理方式不同?

    虽然我在谷歌中找不到对此的引用 但我熟悉这样一个事实 在 javascript 中 全局函数声明在执行任何代码之前都会被解释 换句话说 这工作得很好 f function f 但是 我注意到 chrome 和 firefox 对全局函数声明
  • 冒泡可用于图像加载事件吗?

    我可以用吗 window addEventListner 某种程度上来说 我所有的图像都有一个display none 图像加载后 我想设置display inline 这样我就可以规范下载图像时显示的内容 在这种情况下 我无法预加载图像
  • 非法使用break语句; javascript

    当这个变量达到一定数量时 我希望循环停止 但我不断收到错误 未捕获的语法错误 非法的中断语句 function loop if isPlaying jet1 draw drawAllEnemies requestAnimFrame loop
  • 如何按 Angular 表中的属性(该属性具有单个 rownspan)进行分组?

    我没有找到这个问题的合适标题 我的问题是 例如 我有一个包含两列的表 列汽车品牌和列汽车型号 我希望表是 like in this picture 换句话说 品牌名称只会出现 1 次 我的输入数组采用以下 json 格式 brand Aud
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • AngularStrap 工具提示禁用我的自定义指令

    我正在尝试让 bs tooltip AngularStrap 指令与我自己的名为 checkStrength 的自定义指令一起使用 该指令检查密码的强度 单独使用这些指令中的任何一个时 它们都可以正常工作 但不能一起工作 This http
  • jQuery 中什么函数相当于 .SelectMany()?

    让我解释一下 我们知道 jQuery 中的映射函数充当 Select 如 LINQ 中 tr map function return this children first returns 20 tds 现在的问题是我们如何在 jQuery
  • 在 Android Chrome 中隐藏 HTML5 音频/视频通知

    我的网络应用程序上有一个 HTML5 音频元素 在某些时候 我使用以下代码以编程方式停止播放 audioElement pause audioElement currentTime 0 播放音频时 我的 Android 设备 使用 Goog
  • 如何从除自身之外的其他(blazor)库引用js/css文件?

    我如何引用 使用位于引用的 blazor 项目中的 css cs 文件 该文件与 host cshtml 中的当前项目不同 我的意思是

随机推荐

  • 获取生成的 ProductCode 作为 Wix 中的变量

    在我们的产品中我们使用Product Id 在 Wix 中告诉它为每个新版本生成新的产品代码 现在 我们需要在安装期间将正在安装的 MSI 的产品代码记录到我们的注册表项之一中 我们可以通过循环遍历 卸载 注册表项中的条目来查找产品名称和版
  • Bot Framework v4 中的等待方法

    在 Bot Framework 的版本 3 中 我可以调用卡片并等待用户的响应 context Call new MyHeroCardOptions MyResumeAfter Where 我的英雄卡选项是 HeroCard 类型的卡并且我
  • 如何将此 JSON 对象存储为 cookie,然后在普通 javascript 中读取它?

    我实际上似乎可以把它写成像这样的cookie 4c3dd477c441e17957000002 4c2ac3cc68fe54616e00002e 4c3dd477c441e17957000003 4c3dd477c441e179570000
  • 使用 Javascript 更改背景图像

    我一直在尝试在我创建的网页之一上创建幻灯片 我创建了一个具有唯一类名的 div 其目标是使用 JavaScript 更改背景图像 到目前为止 我已经能够执行以下操作 使用 querySelector 捕获我想要更改背景图像的 div 尝试使
  • Boost 记录器附加到文件

    我已经初始化了记录到文件的接收器 logging add file log keywords file name sample N log lt file name pattern gt keywords rotation size 10
  • 使模板参数成为朋友?

    Example template
  • Android Studio 支持库 v7

    我正在尝试使用支持操作栏 我已遵循有关如何在 Android Studio v 0 3 0 中包含支持库的所有说明 我的 build gradle 的依赖项如下所示 dependencies compile fileTree dir lib
  • php exec() 返回空值

    目前我的目标是使用查看 PHP exec 的输出 但得到一个空值 我正在使用 firephp firebug 扩展 日志记录 但无法弄清楚为什么它是空的 完整代码在这里 https github com MattMcFarland ninj
  • Stream.findAny是短路操作吗?

    考虑这段代码 Object found collection stream filter s gt myPredicate1 s filter s gt myPredicate2 s findAny 它会处理整个流并调用两者吗myPredi
  • 字符串中的街道地址搜索 - Python 或 Ruby

    嘿 我想知道如何在 Python Ruby 中的字符串中找到街道地址 也许通过正则表达式 另外 它将采用以下格式 美国 420 Fanboy Lane 库比蒂诺 CA Thanks 也许你想看看pypostal https github c
  • 找到内接于较大多边形的最大面积多边形

    我想找到一个多边形的旋转和位置 以最大化它可以在更大的多边形内拟合的约束下放大的大小 目前的想法是使用scipy 优化例程 http docs scipy org doc scipy reference optimize html用于优化位
  • React.js 中组件键的重要性

    我只是想知道在阅读文章时https coderwall com p jdybeq the importance of component keys in react js https coderwall com p jdybeq the i
  • 如何使用jQuery更新数据库而不刷新页面?

    我该如何发送这个display false 使用 jQuery 向服务器发送函数 以便在不刷新页面的情况下更新数据库 def display false if display false main id self request get m
  • 无法在 Mavericks/Yosemite 中签署 kext?

    目标 签署我自己的软件包和我自己的内核扩展 上下文中的 我自己的 意味着 我编写的 或者我在其他地方选择的 从它们的源代码中重新编译的 并且想要安装在我的机器上 问题 小牛队不接受我的签名Code Signing Failure code
  • Google 电子表格作为网络应用程序的数据库

    有谁知道我是否可以使用 Google 电子表格来存储自定义 HTML 表单的结果 我知道 Google 电子表格允许在 Google 域本身上创建表单 但是是否可以使用 Google 电子表格作为其他网络应用程序的数据库 谷歌电子表格 AP
  • 左移 255 位(作为一个字节)

    谁能解释为什么以下内容无法编译 byte b 255 lt lt 1 错误 常量值 510 无法转换为 字节 我期待二进制的以下内容 1111 1110 类型转换难倒了我 C 中的数字文字是int not byte 编译器将评估位移位 因此
  • 无法解决 SonarQube 错误“使该行从第 3 列开始”

    我在 xml 中有很多行都存在此错误 布局 字符串 可绘制对象 我尝试将每列的空间更改为 3 在出现此错误的行中放置 3 个选项卡 但在 SonarQube 中仍然出现此错误 我该如何解决这个问题 我在这里举了一个我收到此错误的示例
  • 令人困惑的类型错误

    我有一个小型 Python 程序 它应该通过运行适当的方法来对按下向上按钮做出反应 但它没有这样做 而是给了我一个令人困惑的错误 from tkinter import class App def init self master self
  • 检查 Objective-C 中的日期格式

    我收到一个包含日期的字符串 我想检查它是否具有 dd MM yyyy 格式 现在我正在使用在同一页面中找到的代码 NSDate date dateFormatter dateFromString dateString if date nil
  • 为什么 JavaScript 函数调用要用括号括起来? [复制]

    这个问题在这里已经有答案了 这两个 javascript 函数调用有什么区别 function alert foo 与此相比 function alert foo 这样做是为了可读性 您给出的两个示例之间没有真正的功能差异 但它们都非常接近