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 - 这些没有花括号的函数是什么? [复制] 的相关文章

随机推荐