2010-11-17 22 views
9

staram się zrozumieć, jak Protovis prace i natknąłem się na kodzie tak:Weird JavaScript wyrażenie

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); 

Próbowałem toczenia własne krótkie funkcje, jak poniżej:

(function(a) a+2) 

Jestem NOT z pytaniem o funkcje anonimowe zadeklarowane jako function(){stuff();}. Kod, o którym mowa, wygląda jak function() stuff; i działa. Chcę wiedzieć dlaczego. Nie chcę się uczyć o konstrukcjach takich jak myvar = function(a){return a+1;}, ale o konstrukcjach takich jak myvar = (function(a) a+1). Proszę uważnie przeczytać powyższy kod.

Ale, jak podejrzewałem, spowodował błąd składni.

Jak taki kod może działać?

(Uwaga: kod protovis robi działać zgodnie z przeznaczeniem.)

+1

ja nie rozumiem. Sprawdziłem nawet gramatykę określoną w specyfikacji - nawiasy * są * wymagane do anonimowych funkcji: http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf "A.5 Funkcje i programy ". – delnan

+0

@delnan ja też :) –

Odpowiedz

2

Protovis również ma swój własny kod do obsługi przypadek, gdy przeglądarka używasz nie obsługuje jeszcze format Zamknięcie Wyrażenie tutaj: http://vis.stanford.edu/protovis/jsdoc/symbols/src/src_pv-internals.js.html

+0

dobry punkt. (4 znaki do wykonania) –

+0

Dzięki! Próbowałem ustalić, co '