代码之家  ›  专栏  ›  技术社区  ›  Gabi Purcaru BornCoder

奇怪的javascript表达式

  •  9
  • Gabi Purcaru BornCoder  · 技术社区  · 15 年前

    我试着理解 Protovis 我偶然发现了这样的代码:

    force.node.add(pv.Dot)
        .size(function(d) (d.linkDegree + 4) * Math.pow(this.scale, -1.5)) // notice this
        .fillStyle(function(d) d.fix ? "brown" : colors(d.group)) // and this
        .strokeStyle(function() this.fillStyle().darker()) // and even this
        .lineWidth(1)
        .title(function(d) d.nodeName)
        .event("mousedown", pv.Behavior.drag())
        .event("drag", force);
    

    我试着滚动自己的短函数,如下所示:

    (function(a) a+2)
    

    我是 不是 询问像这样声明的匿名函数 function(){stuff();} . 有问题的代码看起来像 function() stuff; 它起作用了。我想知道为什么。我不想学习像 myvar = function(a){return a+1;} 但是关于结构 myvar = (function(a) a+1) . 请仔细看上面的代码。

    但是,正如我怀疑的那样,它抛出了一个语法错误。

    这种代码如何工作?

    ( 注:Protovis代码 按预期工作。 )

    3 回复  |  直到 15 年前
        1
  •  10
  •   ChaosPandion    15 年前

    这是在JavaScript1.8中引入的表达式闭包。它是ecmascript的扩展。

    https://developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.8

        2
  •  2
  •   Hellion Sundeep    15 年前

    Protovis也有自己的代码来处理您运行的浏览器还不支持表达式关闭格式的情况,这里: http://vis.stanford.edu/protovis/jsdoc/symbols/src/src_pv-internals.js.html

        3
  •  1
  •   icyrock.com    15 年前