Wpis z mikrobloga

@progresywnyRegres: Funkcja ma zawsze dostęp do zakresu w którym została zadeklarowana. Oznacza to, że widzi wszystkie zmienne, które były dostępne w momencie jej deklaracji - czyli tutaj zmienna będzie widoczna wewnątrz funckji, bez potrzebny czynienia ją zmienną globalną.
@progresywnyRegres: Ma, musi mieć. W JS zasięg zmiennych jest funkcyjny, jeśli zmienna nie zostanie znaleziona w danej funkcji przeszukiwany jest zakres wyżej. Gdybyś tutaj zadeklarował tę zmienną wewnątrz funkcji (z użyciem słówka kluczowego var) to wtedy faktycznie po wyjsciu z ciała funkcji zmienna by nie istniała. Ale tutaj jest tak, że ta zmienna nie zostanie znaleziona więc zostanie przeszukany zakres wyżej i tam za każdym razem trafisz na tę samą zmienną.
@progresywnyRegres: Bo $.post jest wywoływane asynchronicznie. W przypadku funkcji asynchronicznych JS przechodzi do dalszego wykonywania kodu i wraca do funkcji asynchronicznej wtedy, kiedy coś się stanie. Jest to popularne akurat w wypadku zapytań AJAX, bo wtedy kod nie musi czekać na wykonanie połaczenia i odebranie danych, cała obsługa dzieje się wtedy, kiedy dane dopiero przyjdą.
var zmienna;


$.post(url, data,


function(){


zmienna = costam;


});

@progresywnyRegres:

a oto trywialne rozwiązanie, które czasami (jeśli żądanie wykona się szybciej niż 1000ms) zadziała

url='/';data="";

console.log(zmienna);

var zmienna;

$.post(url, data,

function(){

zmienna = 1;

});

setTimeout(function(){console.log("po 1s. ",zmienna)},1000)