2016-02-05 13 views
5

W konsoli przeglądarki, jeśli wpisuję var x=10, pokazuje ona undefined, a jeśli wpiszę: x=10, pokaże ona 10. Obaj wykonują to samo zadanie, jaka jest różnica? Nie pytam o różnicę między używaniem var i nie używaniem var?Jaka jest różnica między var x = 10 a x = 10, gdy jest wpisana w konsoli przeglądarki?

+3

Nic ... 'x = 10' zwróci wartość tak 10 jest drukowany w konsoli ... kiedy mówisz' var x = 10', żadna wartość nie jest zwracana, dlatego 'undefined' jest drukowane –

Odpowiedz

3

Jesteś w konsoli przeglądarki, dzięki czemu są alerady w zakresie globalnym i z lub bez var nie mają wpływu na przechowywanie zmiennej:

Prove

Jednak = jest operatorem, który powrót s wartość przypisana, tak a = 1 oceni na 1, a zobaczysz 2 gdy wpisałeś b = 2. var nic nie zwracaj, to nie jest wyrażenie.

+1

Być może niektóre odniesienia: [* semantyka wykonawcza przydziału przydziału *] (http://www.ecma-international.org/ecma-262/6.0/#sec-assignment-operators-runtime-semantics-evaluation) - wyrażenie przypisania zwraca wartość prawej ręki. [* semantyka środowiska wykonawczego zmiennej deklaracji *] (http: // www.ecma-international.org/ecma-262/6.0/#sec-variable-statement-runtime-semantics-evaluation)- if succeed, zwraca * undefined *. – RobG

0

var x = 10; ustawia wartość dla bieżącego zakresu (funkcja wewnętrzna jako przykład).

x = 10; ustawia wartość dla zasięgu globalnego, dzięki czemu jest dostępna wszędzie.

+1

w konsoli przeglądarki –

+0

Wiem, ale to nie ma znaczenia. Możesz również wprowadzać funkcje wewnątrz konsoli za pomocą zmiennych. W tym przypadku zasięg konsoli przeglądarki jest taki sam, jak zasięg globalny, więc nie ma znaczenia. – seahorsepip

+0

Brakowało ci punktu pytania. OP pyta, dlaczego konsola odpowiada "niezdefiniowanym" w jednym przypadku, a "10" w drugim. – nnnnnn

0

Jeśli zmienna jest używana w funkcji lub innym zasięgu nieglobalnym, zmienna nie jest zmienną globalną. Jeśli zmienna var nie jest używana przed nazwą zmiennej, utworzyłeś zmienną globalną.

/

/ These are both globals 
var foo = 1; 
bar = 2; 

function() 
{ 
    var foo = 1; // Local 
    bar = 2;  // Global 

    // Execute an anonymous function 
    (function() 
    { 
     var wibble = 1; // Local 
     foo = 2; // Inherits from scope above (creating a closure) 
     moo = 3; // Global 
    }()) 
} 

Jeśli nie robisz zadanie to trzeba użyć var:

var x; // Declare x 
+1

Dobrze. Z wyjątkiem tego pytania chodzi o to, dlaczego konsola przeglądarki drukuje to, co robi po wprowadzeniu dwóch różnych linii * do konsoli *. – nnnnnn

+0

to nie jest to, o co prosiłem: – Nitin9791

2

WYJAŚNIENIE

przypadek x = 10:

ta tworzy zmienną w zasięgu globalnym o nazwie x o wartości 10. Dodatkowo jest to wyrażenie, które zwraca wartość 10. Funkcja ta jest przydatna, aby być w stanie robić takie rzeczy jak var x = y = 10; która określa zarówno x i y wartości 10

przypadku var x = 10:

Stwarza zmienną w bieżącym zakresie, który właśnie tak dzieje się globalny zasięg o nazwie x o wartości 10. Ponieważ jest on tworzony przy użyciu składni , nie może być oceniany jako wyrażenie, dlatego zwraca undefined, który jest drukowany na konsoli.

STRESZCZENIE

Nie ma różnicy w efekcie pisania var x = 10 vs x = 10 z konsoli, chociaż nie będzie w innych miejscach. Ten ostatni nie jest również dozwolony w trybie ścisłym. Jednak pierwszy zwraca undefined, ponieważ po uruchomieniu nie ma wyjścia, jednak druga zwraca 10, ponieważ x=10 jest wyrażeniem.

Przykład

Można zobaczyć, co dzieje się trochę lepiej, jeśli używasz eval

var output = eval('x = 10'); 
console.log(output)   // 10 

vs

var output = eval('var x = 10'); 
console.log(output)   // undefined 
0
// they both define var x and set it value to 10,but they are diff about below 

// x is globally 
x = 10 

// x is scopely 
var x = 10 

W ENV przeglądarki globalnie średnią var jest zdefiniować jako Object window „s własności

jednak być ostrożnym przy użyciu pierwszego kodu, może spowodować globalny zdefiniować zmienną.

A jeśli w strict mode, to nie będzie działać, ponieważ Pośrednio zdefiniowane globalnej nie pozwalają.

+0

OP rozumie, co robią obie wersje, a także zakres. Pytanie brzmi, dlaczego po wprowadzeniu tych linii * do konsoli * konsola podaje inne odpowiedzi. – nnnnnn

1

Scenariusz 1:

Zobacz Zasadniczo podczas wpisywania x = 10 na konsoli przeglądarki dostajesz 10 bo 10 jest wartość int zwracane przez konsolę przeglądarki.

Scenariusz 2: Scenariusz 2: A gdy wpisujesz var x = 10 na konsoli przeglądarki otrzymujesz "niezdefiniowany", ponieważ wyświetla on wartość zwracaną każdego polecenia, a konsola nie zwraca nic w tym scenariuszu.

i dalej Więcej Reference znaleźć tutaj:

http://blog.modulus.io/absolute-beginners-guide-to-nodejs

Powiązane problemy