2012-10-08 13 views
8

Eventuali duplicati:
JavaScript Function Syntax Explanation: function object.myFunction(){..}Periodi di definizione funzione JavaScript (funzione window.onload() {})

Ho visto alcuni (legacy) codice javascript di recente che assomiglia :

function window.onload(){ 
    // some code 
} 

Questo non apparire come JavaScript valida per me dal momento che non si può avere un periodo in un IDE ntifier, ma sembra funzionare in IE8. Penso che sia l'equivalente di:

window.onload = function(){} 

Ho provato lo stesso codice in Chrome e IE9 e ciascuno di essi sollevare eccezioni di sintassi, quindi sono io ragione nel pensare che questa "caratteristica" di IE8 è un po 'non- definizione di una funzione standard che dovrebbe essere sostituita? Il codice in questione viene inviato solo ai browser IE, quindi probabilmente questo è il motivo per cui non ho riscontrato questo problema prima.

+7

IE8 è pieno di meraviglie inaspettate ... –

+1

Haha, wow, è terribile. – Ryan

risposta

2

JavaScript sul browser recenti, di solito si può fare riferimento a ECMAScript e chiaramente, questo non è consentito in ECMAScript:

ECMAScript spec on function definition:

La produzione FunctionDeclaration: la funzione Identifier ( FormalParameterListopt) { FunctionBody} [...]

Creare una proprietà dell'oggetto variabile corrente (come specificato nel 10.1.3) con il nome Id entifier

SO on valid names (nel caso in cui qualcuno potrebbe pensare "window.onload" è il nome della funzione, che in tal modo sarebbe window.window.onload)

+0

Grazie! Volevo ottenere una seconda opinione prima di portarla allo sviluppatore originale. – nemec

+0

Mi auguro che il suo modo di definire le funzioni non compatibile con IE9, Chrome, Safari, Firefox o Opera sia sufficiente per convincerlo, anche senza il collegamento agli standard. –

+0

Bene, questo codice viene eseguito solo in IE e precede IE9, quindi sono solo moderatamente sorpreso dal fatto che sia stato perso. – nemec

0

È possibile definire nuove funzioni utilizzando questa sintassi:

function myFunc(args) 
{ 
    ... 
} 

La funzione window.onload è definita dal browser e può essere null. Il periodo indica che il valore onload è un membro dell'oggetto window. La sintassi seguente avrà una funzione e assegnarla al valore del membro onload:

window.onload = function() 
{ 
    ... 
}; 

Non dimenticare il punto e virgola finale, poiché questa è un'istruzione di assegnazione.

+1

Potrebbe essere necessario dare un'altra occhiata alla domanda. OP sta chiedendo questa sintassi, che non è valida, ma funziona in IE8: 'function window.onload() {' –

+0

Giusto, non dovresti farlo per i membri che sono già dichiarati. –

+0

In realtà non ha nulla a che fare con i membri dichiarati/non dichiarati. La sintassi della funzione utilizzata è del tutto invalida per JavaScript. Dà un * SyntaxError * a causa del '.' nel nome. Ma in qualche modo funziona in IE. –