2014-07-05 2 views

Répondre

-1

Vous tentez d'utiliser une variable qui n'a pas été déclarée auparavant. Cela entraîne une erreur de référence.

[edit] autant de mots faux.

[sortie] @grc a bien compris.

+2

'x = x' est opération d'affectation, pas de comparaison – hindmost

-1

x = x || 4 signifie l'affectation de x ou 4 dans la variable x. si x est nul 4 est affecté à la variable x.

Peut-être n'avez-vous pas déclaré la variable x. c'est la raison pour laquelle vous obtenez x is not defined

Si vous essayez ci-dessous fonctionner:

var x; 
x=x||4; 
alert(x); 

Cela permettra également de travailler:

x=x||4; 
var x; 
alert(x); 
+0

Quel est le problème en réponse ??? –

2

En effet, les déclarations de variables sont traitées en premier (levage). Le MDN page on var explique bien:

Because variable declarations (and declarations in general) are processed before any code is executed, declaring a variable anywhere in the code is equivalent to declaring it at the top. This also means that a variable can appear to be used before it's declared. This behaviour is called "hoisting", as it appears that the variable declaration is moved to the top of the function or global code.

Ainsi, les éléments suivants travailleraient aussi:

x = x || 4; 
var x; 
+0

Alors, pourquoi 'x = (x || 5)' génère-t-il une erreur? De plus, je ne veux pas utiliser 'var', la variable devrait être déclarée globalement. – PHPst

+1

Parce que la variable «x» n'est pas connue par l'analyseur - et une tentative d'accès à sa valeur renvoie 'ReferenceError'. Si vous voulez vraiment aller avec des variables globales, utilisez 'window.x = window.x || 4' syntaxe. – raina77ow

+0

Notez que 'x = window.x || 4' fonctionnera bien en mode non strict, mais en mode strict jette une erreur. – raina77ow