JavaScript 闭包语法

2024-04-14

这些结构之间有什么区别、优点/缺点(如果有)?

 new function(obj) {
     console.log(obj);
 }(extObj);

vs

 (function(obj) {
     console.log(obj);
 })(extObj);

第一个返回对匿名构造函数的新构造实例的引用(=this).

第二个返回匿名函数的返回值。由于您的函数没有 return 语句,因此它将隐式返回 undefined。

请尝试以下操作:

var t1 = new function(obj) { console.log(obj); }(extObj);
var t2 =    (function(obj) { console.log(obj); })(extObj);

typeof t1 => "object"
typeof t2 => "undefined"

(Btw, t1.constructor将返回您创建的原始函数t1 with.)

如果添加 return 语句,差异就会变得更加明显:

var t1 = new function(obj){ return(obj); }("foo");
var t2 =    (function(obj){ return(obj); })("bar");

console.log(t1) => "object"
console.log(t2) => "bar"

国际海事组织,这使得(function)()对于日常用例来说更有用 - 您将此函数执行的返回值分配给变量,如果您正在使用立即调用的函数,这通常是您想要的。特别是当有更复杂的事情时,例如(伪代码):

var myNameSpace = (function(){
    /* do some private stuff here*/
    ...
    /* expose parts of your anonymous function by returning them */
    return{
       functionX,
       variable1,
       variable2
    }
}();

基本上,您可以使用任意一元运算符将函数声明转换为立即调用的表达式。所以你也可以写:

!function(){ /* code */ }();
~function(){ /* code */ }();
-function(){ /* code */ }();
+function(){ /* code */ }();

根据函数的返回语句,它们将给出不同的返回结果。!- 否定返回值+|-评估为数字(应用负号)~ apply bitwise not到返回值。

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

JavaScript 闭包语法 的相关文章

  • onclick 函数上的 CSS 选择器

    有没有办法让CSS选择器onclick function 您可以在onclick https stackoverflow com questions 24365416 select element which have specific a
  • 使用 keyup 上的 Submit() 提交表单两次

    我有一个与此类似的 jQuery HTML 代码
  • 在 HTML5 中使用 JS 创建内联 SVG

    我正在使用本地 HTML5 文件 它有在顶部 我在里面放了这样的东西
  • 1分30秒倒计时器javascript

    我有代码 但它适用于 2 分钟计时器 我需要将其修改为 1 分 30 秒计时器 我已经尝试过 但未能从 1 30 开始计时器 因为我是这一行的初学者 并且想学习如何做到这一点 这是代码 div div
  • Webpack 和 Angular HTML 图像加载

    我一直对 webpack 和 Angular 感到头疼 这可能有一个简单的答案 但我无法弄清楚 我已经阅读了堆栈溢出中关于这个主题的几乎所有答案 但都无济于事 我有一个像这样的 html 页面 还有其他包含图像的模板 img
  • FormData 中的 Blob 为 null

    我正在尝试通过远程 API 通过 ajax 在 android 中发送创建的照片 我在用着相机图片背景 https github com an rahulpandey cordova plugin camerapicturebackgrou
  • Famo.us 滚动视图高度

    我正在尝试使用著名的顺序布局在滚动视图下方添加图像 但滚动视图的高度有问题 这就是我创建滚动视图的方式 var scrollview new Scrollview direction Utility Direction X options
  • 使用 Javascript eval() 100% 安全吗?

    我正在编写一个生成 Javascript 代码的 PHP 库 Javascript 代码有许多名为component001 component002 etc 页面通过 AJAX 动态加载 我需要通过 URL 变量传递组件的名称 然后由脚本进
  • 自 2012 年 6 月 12 日以来,“未定义”随机附加在我网站上 1% 的请求网址中

    自 2012 年 6 月 12 日 11 20 TU 起 我在我的 varnish apache 日志中看到非常奇怪的错误 有时 当用户请求一页时 几秒钟后我会看到类似的请求 但 url 中最后一个 之后的所有字符串已被 未定义 替换 例子
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • 更改特定字符串的颜色

    有谁知道如果将特定单词输入文本区域 我如何更改它的颜色 例如 如果用户输入 你好我的朋友 它会动态地将 你好 更改为绿色 在google上花了很多时间 找不到任何相关的东西 谢谢 textareas 的设计目的不是选择性着色
  • 使用 javascript 调整图像大小以在画布 createPattern 中使用

    我见过一些关于如何调整图像大小的技巧 在 IMG 标签内使用 但我想在里面有一个图像变量 一个 Javascript 调整它的大小 然后使用 a 中的图像 context createPattern 图像 重复 我还没有找到任何提示 关于如
  • 我可以在不使用 Jquery UI 的情况下获得 Jquery Pulsate Effect 吗?

    我遇到了由于某种原因无法使用 Jquery UI 的情况 我正在尝试在不使用 Jquery UI 的情况下获得 Jquery UI 脉冲效果 与此链接类似 http docs jquery com UI Effects Pulsate ht
  • 如何上传文件 - sails.js

    我可以下载图像和 pdf 但无法下载文档文件 doc pptx odt 下载文档 doc pptx odt 时 仅将其下载为 ZIP XML 文件 我可以做什么 我在用着 填写上传文件文档 https github com balderda
  • 不可见的 reCAPTCHA - 缺少必需的参数:sitekey

    我正在为每个带有具有类的按钮的表单动态加载不可见的 reCAPTCHAg recaptcha 我遇到的问题是验证码未正确加载 我不知道为什么 我按照验证码网站上的文档进行操作 但我不确定如何以及为什么会出现此错误 Uncaught Erro
  • 当选项卡重新加载(chrome 扩展)时,如何运行此脚本?

    所以我想在指定 URL 中重新加载选项卡时运行脚本 它几乎可以工作 但实际上 id 不能 这是我的清单文件 manifest version 2 name Sample Extension description Sample Chrome
  • 如何仅突出显示嵌套表的最里面的表行?

    我有几个嵌套表 我想突出显示鼠标指针下方的最里面的行 我怎样才能做到这一点 一些提示 我使用嵌套表来显示递归表格数据 表可以嵌套 10 层 嵌套正如您所期望的那样 table tr td table tr td table tr td 可能
  • 指定在任何 Jest 设置发生之前运行的代码

    tl dr 是 1 我怎样才能让Jest使用原生的require函数可以在任何地方加载我的测试中的所有模块 2 我将在哪里 如何进行修改 即替换为esm加载程序 https github com standard things esm ht
  • 如何制作过期/签名视频嵌入网址

    我是新来的 正在学习网络开发等等 我只知道如何将我的视频嵌入网站中 任何菜鸟都可以轻松获得源代码 他们也可以嵌入它 但在许多网站中 视频 src 均使用重定向器链接进行编码 例如 它会在一段时间后过期 在本例中是一天 我了解到这是一个签名网
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959

随机推荐

  • Grunt 将每个目录中的所有 .less 编译为 .css

    因此 我已将站点设置为使用模块 其中每个模块都有自己的 less 文件 需要将其编译为 css 文件夹结构 common modules module name style less 我需要将所有 style less 文件转换为同一目录中
  • 初始化后如何更改引导轮播的间隔

    根据 doco 使用以下命令将设置轮播循环速度 carousel carousel interval 2000 但是 如果您已经初始化了轮播 则以不同的时间间隔调用上述内容没有任何效果 我应该注意 通过 JS 初始化轮播并不会设置data
  • 计算数组中元素出现的次数

    char array a a a b b c c c a d 我想计算该数组中的每个相同元素 以便可以将其从最高频率到最低频率进行排序 我希望输出变成这样 4 for a 2 for b 3 for c 1 for d 我已经尝试过这个 p
  • 在 Outlook 中,是否可以对我手动选择的电子邮件运行宏?

    是否可以对我在收件箱中手动选择的电子邮件运行宏 例如 右键单击电子邮件并选择 发送到 gt gt 宏 gt gt 显示接受 Outlook MailItem 作为参数的子例程列表 我认为您必须在邮件功能区中添加一个按钮 该按钮可以调用例程
  • 抓住每组中具有最高值的行?

    我的数据看起来像这样 Table Group A Color Blue Count 400 Group A Color Green Count 3 Group A Color Yellow Count 6 Group A Color Red
  • Watch OS 2 - 如何在 Watch 上存储完全本机应用程序的数据?

    我需要在 WatchKit 扩展上存储大约 5 个变量 仅在手表端 该应用程序将完全是原生的 不会向 iPhone 传递任何信息 如果手表重新启动 我需要保留数据 该应用程序当前在重新启动时重置为默认变量状态 我不知道该用什么 我在网上找到
  • Angular Animate 幻灯片从右侧翻页并从右侧翻页 (nganimate)

    我正在使用 Angular js 开展一个学校项目 我们还必须在我们的网站中实现一些动画 由于我的网站是主从结构 我想滑动详细信息页面 这是一个单独路由的页面 从右侧滑入 这其实并不是一个问题 但是当我返回 母版 页面时 母版页将从右侧滑入
  • 如何在Java中添加环境变量? [复制]

    这个问题在这里已经有答案了 可能的重复 如何从 Java 设置环境变量 https stackoverflow com questions 318239 how do i set environment variables from jav
  • 无法读取未定义的 extract-text-webpack-plugin 的属性“查询”

    我正在尝试使用 webpack 2 实现 extract text webpack plugin 并且我正在从头开始构建我的 webpack config js 当我想添加插件时 我按照以下说明进行操作npm https www npmjs
  • 如何获取 Angular 2 中当前模块的元数据?

    我想获取当前的元数据NgModule为了得到列表declarations and providers为了填充动态模块 我创建了一个在模态中显示组件的模块 那怎么办呢 您可以使用以下方式访问声明reflect metadata https g
  • couchdb:设计文档中的地图给出了compilation_error

    我在 Debian 测试中使用 Couchdb 1 1 1 我在数据库中有这个设计文档 id design Page rev 9 1944cdebabf20ae569eab7b534b43e67 views all map function
  • 使用特征应用代理

    我想为一个属性编写一个特征 为它提供一个代理 这样我就可以操纵 sees 背后的值 甚至可以为 direct access在一个班级内 这就是我现在所拥有的 但正如您所看到的 实际的 get set 或 store fetch 方法从未被调
  • 带下拉箭头的 GWT 文本框

    我想在文本框中有一个下拉箭头 在我的例子中实际上是 SuggestBox GMail 执行此操作是为了实现高级搜索功能 打开高级搜索对话框 要使该箭头显示在 TextBox 的右侧并可单击 正确的 GWT 布局是什么 看看 GMail 我发
  • 生成验证码图像 PHP

    我想使用 PHP imagettftext 生成验证码图像 以下是我的代码 它给出了一个空图像 我想解决这个问题 我已经测试了代码 但无法找到为什么图像没有显示 尽管我的随机文本被传递给验证码图像生成函数
  • 我可以在不设置内容类型的情况下调用 WCF 服务吗?

    我正在尝试使用 webHttpBinding 将遗留的 REST 普通旧 xml Web 服务替换为 WCF 服务 它必须向后兼容现有客户端 目前不在请求中发送内容类型标头 当我将客户指向我的新 Web 服务时 我收到 HTTP 错误 41
  • 用于嵌入 YouTube 视频的 CSP

    我刚刚开始在 Chrome 上的嵌入式 YouTube 视频中看到这一点 86 0 4240 193 最近更新 这可能就是我看到这个的原因 这些只是 报告 因此视频仍然会显示 但可能会出现数百个错误不对吧 这就是我所看到的 Report O
  • 在数据帧 R 中解除数据帧的嵌套

    我想解除这个数据框的嵌套 df lt tibble bears c 1 2 3 eagles tibble talons c 2 3 4 beaks c x y z 所以它看起来像 tibble bears c 1 2 3 talons c
  • 如何将 Flutter TextField 与 Firestore 字段同步?

    I have taskFirestore 中的文档 其中有todo场 以及TextField在 Flutter 用户界面中 请指教如何制作textfield与同步todo场 即 任何时间 在textfield随着用户的输入而改变 更新tod
  • 当出站 TCP 端口耗尽时,消费计划中的 Azure Functions 会如何表现?端口限制是多少?

    我正在考虑使用消费计划上的 Azure Functions 作为在应用服务计划上的 Azure WebJobs 上实施某些内容的替代方案 最近 在使用 WebJobs 时 我们在监控和识别导致应用服务计划实例上 TCP 端口耗尽的应用程序时
  • JavaScript 闭包语法

    这些结构之间有什么区别 优点 缺点 如果有 new function obj console log obj extObj vs function obj console log obj extObj 第一个返回对匿名构造函数的新构造实例的