Protovis - 这些没有花括号的函数是什么? [复制]

2023-12-19

可能的重复:
JavaScript 中不带花括号的 Lambda 函数语法 https://stackoverflow.com/questions/5919351/lambda-function-syntax-in-javascript-without-curly-braces

处理 Protovis - 他们实现了一些奇怪的委托函数,这些函数没有大括号 - 有人可以为我遮光吗? 例子:

vis.add(pv.Label)
.data(cols)
.left(function() this.index * w + w / 2)
.top(0)
.textAngle(-Math.PI / 2)
.textBaseline("middle");

一般来说,如中所解释的问题@missingno 链接到 https://stackoverflow.com/questions/5919351/weird-lambda-function-syntax-in-javascript,这是声明函数的替代语法,主要受 Firefox 支持。代替:

function() { return "stuff" };

你省略了大括号并且return陈述:

function() "stuff";

函数的结尾出现在普通语句可能结束的任何地方 - 分号 (;), 一个逗号 (,),或右括号 ()).

在普罗托维斯,在很多情况下,您需要声明简短的单语句匿名函数作为参数传递给方法调用。这是一种常见的模式,该库包含一个解析实用程序,以确保 Firefox 以外的浏览器支持上述语法。如果您将 Protovis 代码包含在脚本标签中,如下所示:

<script type="text/javascript+protovis">
// ...
</script>

该脚本将由 Protovis 解析器进行评估,这确保了对特殊语法的支持。

我对此的两点看法是:这种语法的优点是它非常快(加上所有示例都使用它)。使用 Protovis 的典型脚本涉及lot匿名函数,所以这可以节省你一些打字,而且看起来非常棒。当我第一次开始使用 Protovis 时,我经常使用它 - 不仅在方法调用中,还在变量声明中。

But,它有一些非常严重的问题:

  • 因为你的所有代码都是通过 Protovis 解析器运行的,它本质上是对代码进行修改以重新添加return陈述,然后eval()有了它,调试简单的语法错误就变得异常困难。您会收到所有这些“意外标识符”错误,指向eval()Protovis 代码中的一行,没有指示问题(缺少分号等)发生在您自己的代码中。

  • 如果您希望代码在 Firefox 之外工作,则必须将所有代码包含在特殊的javascript+protovisscript 标签,这意味着没有外部文件。一旦你开始做任何哪怕是边际复杂性的事情,你真的希望在大多数时候将你的脚本分开。

  • 与任何“聪明”的语法一样,它可能会变得非常难以阅读,尤其是当您以意想不到的方式使用它时(例如,在方法调用之外)。是的,它很简洁,但是在易读性方面要付出一定的代价。

尽管如此,当我想快速绘制粗略草图时,我仍然使用它。但大多数时候,我建议坚持使用普通的脚本标签和标准的大括号函数声明。

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

Protovis - 这些没有花括号的函数是什么? [复制] 的相关文章

  • 我是否需要关心异步 Javascript 的竞争条件?

    假设我加载了一些我知道在将来某个时候会调用的 Flash 影片window flashReady并将设置window flashReadyTriggered true 现在我有一个代码块 我想在闪存准备好时执行它 我希望它立即执行 如果wi
  • 如何使对象“a == b”的比较成立? [复制]

    这个问题在这里已经有答案了 这是面试前 JavaScript 在线测试的问题之一 function F var a new F var b new F Q 如何进行比较a b to be true e g console log a b t
  • “过滤”JSON 以获得唯一键并获取所有相关值

    找到一个组中所有可能的相关值的最佳方法是什么 var table group a stuff new group a stuff old group b stuff newOld group b stuff old group c stuf
  • React useEffect hook 和 Async/await 自己的获取数据函数?

    我尝试创建一个从服务器获取数据的函数 并且它有效 但我不确定这是否正确 我创建了一个函数组件来获取数据 使用useState 使用效果 and 异步 等待 import React useState useEffect from react
  • CSS - 制作“步进”文本的好方法?

    有没有一种好的方法可以实现以下目标 而无需任何额外的标记 不过使用 JavaScript 就很好了 任何想法 Thanks Edit 我的标记将是这样的 div style width 400px p Text text text Text
  • 正则表达式没有按预期工作?

    我有这个正则表达式 new RegExp a z 0 9 ig 我正在测试一个不应该工作的字符串 vc 但它确实通过了测试 而且它不应该 new RegExp a z 0 9 ig test vc true 但如果我删除其中一个 or or
  • Lodash 和 Underscore.js 之间的差异 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 为什么有人会更喜欢Lodash http lodash com or 下划线 js http underscorejs org 实用程序库优于其
  • JavaScript 中的凯撒密码

    我正在尝试编写一个程序来解决javascript中的以下问题 写在本段下面 我不知道为什么我的代码不起作用 有人可以帮助我吗 我是 JavaScript 新手 这是一个免费的代码训练营问题 现代常见的用法是 ROT13 密码 其中字母的值移
  • 如何用方向键移动div

    我想使用 jQuery 用箭头键移动 div 所以右 左 下 上 找到了我想要完成的演示here http atomicrobotdesign com blog htmlcss move objects around the canvas
  • Javascript 3d 绘图实用程序? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道有什么好的 javascript 3d 绘图实用程序吗 我知道每个网站都推荐过画布 3d 图
  • 根据复选框显示/隐藏输入字段[重复]

    这个问题在这里已经有答案了 如果单击该复选框 它将显示一个输入字段 到目前为止它正在工作 但如果未选中该复选框 它应该隐藏它 我该怎么做 div class checkbox div
  • 在浏览器中打开的 .mhtml 文件中填写输入

    我想对 mhtml 文件运行 e2e 测试 即填写表格 在 mhtml 文件上查看和提取数据效果非常好 但我无法填写任何内容input字段 既不是手动也不是通过木偶操作者 你可以用这个试试 mhtml 文件 https gist githu
  • ES6 模板文字可以在运行时替换(或重用)吗?

    tl dr 是否可以制作可重用的模板文字 我一直在尝试使用模板文字 但我想我就是不明白 现在我感到沮丧 我的意思是 我想我明白了 但 它 不应该是它的运作方式 或者它应该如何实现 它应该变得不同 我看到的所有示例 甚至标记模板 都要求 替换
  • 用空字符串替换状态:Javascript

    我有这个网址 website com con blog true 我在 javascript 中所做的是 if getURLparams blog RandomFunction change the url window history r
  • 图像未显示在从 HTML 创建的 PDF 上

    我想动态创建 PDF 这意味着我将从 Google Drive 获取文件 然后将它们放入 HTML 代码中 并尝试从中创建 PDF 一切工作正常 除了图像没有显示 我现在正在做的是 从 HTML 字符串创建 HtmlOutput 获取该 H
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • 更改哈希值而不触发 hashchange 事件

    我使用哈希来动态加载内容 为了使后退按钮正常工作 我正在捕获哈希更改 然而 有时我需要更改哈希值而不触发哈希更改函数 例如 当页面重定向到服务器端时 我需要在内容返回后更新哈希值 我想出的最佳解决方案是取消绑定 hashchange 事件
  • 将数组数组的字符串转换为 Javascript 数组数组的优雅方法?

    我有一个 ajax 请求 它返回一个值列表 如下所示 5 5 5 6 15 15 7 13 12 我需要它是一个带有数字的 javascript 数组 5 5 5 6 15 15 7 13 12 我尝试将 和 替换为 然后用 分割和 for
  • ReactJS setState 仅在嵌套在 setState 中时才有效

    问题 当我使用 this setState 并在回调中输出状态时 它根本不会改变 但是当我将 setstate 嵌套在 setstate 中时 它将正常工作 例子 这不行 this setState data newData 这确实有效 t
  • 在哪里放置资源特定逻辑

    您能帮我考虑在 AngularJS 中将资源 服务 特定的业务逻辑放置在哪里吗 我觉得在我的资源上创建一些类似模型的抽象应该很棒 但我不确定如何做 API调用 gt GET customers 1 lt first name John la

随机推荐