是否可以声明带有属性的匿名非 IIFE JavaScript 函数

2023-11-30

我有一次发现,在将属性作为参数传递给其他函数之前,将属性分配给函数很有用。

看起来像这样(对于匿名函数和变量分配函数对象之间的任何混淆,我感到抱歉,我认为它们不是同一件事):

"(could strict mode have something to do with this?)"

var funcOne = function(arg1, arg2) { return arg1 + arg2; };
funcOne.process = true;
var funcTwo = function(arg1, arg2) { return arg1 + arg2; };
funcTwo.process = false;

var procFunc = function(argFunc) {
    if (argFunc.process) { 
        return argFunc(1,2);
    }
    return "not processed"
}

procFunc(funcOne); // 3
procFunc(funcTwo); // "not processed"

我想声明一个匿名函数并同时为其分配属性,以便稍后将其作为函数数组堆栈的一部分调用时,条件代码可以依赖于该属性。

就像是:

"(could strict mode have something to do with this?)"

var funcOne = function(arg1, arg2) { return arg1 + arg2; }.process = true;
var funcTwo = function(arg1, arg2) { return arg1 + arg2; }.process = false;

var procFunc = function(argFunc) {
    if (argFunc.process) { 
        return argFunc(1,2);
    }
    return "not processed"
}

procFunc(funcOne); // "not processed"
procFunc(funcTwo); // "not processed"

意外的“未处理”是因为令人困惑的是,JavaScript 实际上将值“true”和“false”分配给 funcOne 和 Two 变量,并且当条件满足时它不会抛出错误if (argFunc.process)被评估(不管,正如我想的那样,“严格模式”)。

我已经使用 IIFE 实现了匿名功能,该 IIFE 将“匿名”函数分配给变量,然后分配该变量的属性并从 IIFE 返回该变量,但我希望有一个 JavaScript 语法可以实现这一点,或者只是也许是更好的方法。

就我的感觉而言,我尝试的点属性分配没有意义。如果程序员想要为匿名函数分配多个属性怎么办?

我有一个短暂的希望var funcOne = function (arg1, arg2) { return arg1 + arg2; } = { process: true };但这会引发SyntaxError: Invalid left-hand side in assignment.


要创建函数,您有两种选择:

  • 函数声明

这样,不涉及任何表达式:

function funcOne(...) {
}

没有办法附加类似的东西funcOne.process = true除非作为单独的、独立的声明。 (并不是说这是一件坏事 - 我实际上更喜欢这样的第二个陈述,它可能是最容易阅读的)

  • 函数表达式

有了这个,你就有了一个可以分配给变量名的函数表达式 - 但你不能分配给变量名and同时为函数分配一个属性=, 因为=(赋值运算符)解析为被分配的值,无论左边是什么类型的东西=。这就是为什么以下方法不起作用:

var funcOne = function x(arg1, arg2) { return arg1 + arg2; }.process = true;

上面,分配的值是true,所以该值funcOne收到的是true(不保留对该函数的引用)。

但是,你可以使用Object.assign,这解决了first参数,分配给的对象,将函数的声明和要分配给函数对象的附加属性组合在一个最简洁的语句中:

var funcOne = Object.assign(
  (arg1, arg2) => { return arg1 + arg2; },
  { process: true }
);
console.log(funcOne(3, 4));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以声明带有属性的匿名非 IIFE JavaScript 函数 的相关文章

随机推荐

  • 协议中的 Swift 协议属性 - 候选者具有不匹配的类型

    我有一个协议 ProtocolA 其中包含符合第二个协议 ProtocolB 的单个属性 public protocol ProtocolA var prop ProtocolB get public protocol ProtocolB
  • 与嵌套的 Flexbox 网格作斗争

    我试图用基于负边距的网格系统 susy 实现类似网格的模式 但失败了 我尝试使用 Flexbox 但我不确定它是否真的可行 我认为最好的方法是 2 列 A 侧和 B 侧 并为框 1 提供框 2 的 50 的伸缩高度 但它不知何故似乎不起作用
  • PHP - 合并两个数组类似于 array_combine,但具有重复的键

    我有两个数组 arrKeys array str str otherStr arrVals array 1 22 1 99 5 17 我想将它们合并成这样的东西 arrResult array array str gt 1 22 array
  • .xaml 和 .xaml.cs 文件之间有什么联系

    对于视图 有相应的 xaml 和 xaml cs 文件 这些文件是如何关联的 我对 xaml 非常陌生 我想我在 xaml 文件中看到了动态占位符 但明确引用了文件作为除相应 cs 文件之外的源 我想我看到了控制器视图行为 其中用户交互触发
  • 如何在 VB.NET 中为以编程方式创建的对象创建事件处理程序?

    假设我有一个动态创建的对象 例如 假设我创建一个名为 MyButton 的按钮 Dim MyButton as New Button MyButton Name MyButton 例如 如何创建 点击 事件 如果它是静态创建的 我可以创建一
  • 匹配可迭代类型(带有 begin()/end() 的数组和类)[重复]

    这个问题在这里已经有答案了 我编写了类型特征 例如可以用来测试给定类型是否 可迭代 的类 这对于数组来说是正确的 对于T N 不是为了T 并且对于具有begin and an end返回看起来像迭代器的东西的方法 我想知道是否可以比我做的更
  • 如何使用 json 库解析嵌套的 JSON 对象?

    我想使用 json 库解析 json 对象 batters batter id 1001 type Regular id 1002 type Chocolate id 1003 type Blueberry id 1004 type Dev
  • 有没有办法在 R 图中对齐 2 个独立轴?

    我正在绘制具有不同轴的图表 问题是我希望两个轴交叉一个点 其余的并不重要 是否可以 这是一个可重现的代码 plot x 10 10 y 10 10 abline v 0 lty 2 par new TRUE plot x 10 50 y s
  • 无法运行从 Scala 文件创建的 jar 文件

    这是我用 Scala 编写的代码 object Main extends App println Hello World from Scala 这是我的构建 sbt name hello world version 1 0 scalaVer
  • VB.NET 中通过后期绑定实现的多态性不允许使用事件,有解决方法吗?

    我正在开发一个与一系列 USB 传感器通信的应用程序 我创建了一个使用名为 Sensor 的类的基本实现 该类包含允许与传感器交互的事件和方法 还涉及一个线程任务处理器 但我将举一个简单的示例 我的问题是 这个简单的概念验证示例运行良好 但
  • 在 Android 手机中启动图库

    当用户单击通知时 我试图从我的应用程序启动图库 我发现只有当您知道 Gallery 应用程序的包和类名时才有可能 我已经成功地为四家设备制造商找到了相同的内容 到目前为止 该代码有效 我只需要 Motorola 和 LG Android 手
  • 需要帮助在 tomcat 中调试 SSL 握手

    我有一个非常奇怪的问题并正在寻找一些提示 我有一个由客户端发送的证书 我需要安装该证书才能访问 HTTPS Web 服务 Windows 和 Linux 操作系统中均已安装证书 使用 keytool 命令 keytool import al
  • EDMX .NET 4.5 到 4.0?

    我们使用实体框架 并在项目设置为构建 NET 4 5 时创建了 EDMX 现在我们想要切换到 NET 4 0 但是当我们这样做时 我们会收到 EDMX 文件的编译错误 它指出以下错误 Error 10027 The XML namespac
  • 使用 itext (itextsharp) 替换一个 PDF 模板页面上的多个不同图像

    我们有一个 ASP NET 应用程序 用户可以用它来生成某些报告 到目前为止 我们有一个 PDF 模板 上面有一张图像 我们只需用我们以编程方式生成的图像 图表 替换该图像 我们使用了该网站的代码 http blog rubypdf com
  • Ansible playbook 检查用户是否存在或显示错误消息

    如何检查用户是否存在以及 如果存在 则继续下一个任务 如果不存在 则显示一条消息 Given user does not exist 您可以简单地使用获取模块 name get root user info getent database
  • F# 性能问题:编译器在做什么?

    参考这段代码 F 静态成员类型约束 为什么 例如 let gL G of 1L 1L 100000L gt List map fun n gt factorize gL n 明显慢于 1L 100000L gt List map fun n
  • 扩展样式表块

    我在基本布局中有样式表块 stylesheets filter cssrewrite bundles static css main css endstylesheets 我想知道是否可以在子模板中扩展此块 添加另一个或多个 CSS 链接
  • MeekroDB 错误“命令不同步;您现在无法运行此命令”

    我有一个包含以下几行的 PHP 脚本 require once meekrodb 2 1 class php DB user usr DB password pwd DB dbName db DB encoding utf8 results
  • 确定 CSV 的数据类型 - Python

    我是 Python 新手 在使用列表时遇到问题 我公开了我的问题 如您所见 我有一个具有以下结构的 datos csv 文件 1 4 0 none 2 2 0 3 0 none 2 2 5 2 5 tc 39 使用此函数我将数据存储在列表中
  • 是否可以声明带有属性的匿名非 IIFE JavaScript 函数

    我有一次发现 在将属性作为参数传递给其他函数之前 将属性分配给函数很有用 看起来像这样 对于匿名函数和变量分配函数对象之间的任何混淆 我感到抱歉 我认为它们不是同一件事 could strict mode have something to