Asta înseamnă că sintaxa javascript (function ()

Pentru a evita date false, care, în acest thread suficient, inserat și cei doi cenți:

o întrebare similară am răspuns deja - Problema cu procesoarele din ciclul. Doar a existat o soluție sintaxă similară

De fapt, ea viata - Imediat-Invocat Expression Function, și pentru ce poate fi folosit a fost deja descrisă aici, dar de ce PIT este utilizat în script-ul de la link-ul:

astfel încât de fiecare dată când în ciclul funcționează cu funcții asincrone, indiferent dacă time-out, manipulare eveniment și callback, iskolzuetsya întotdeauna tehnică similară

Acest lucru se face în așa fel încât să nu polueze variabilele locale și domeniul de aplicare la nivel mondial și copii ale Met exemplul cel mai important la nivel mondial în JQuery. Aceasta este:

Acest cod în domeniul de aplicare la nivel mondial adaugă doar myVal și are propria copie a ferestrei și nedefinit (nedefinite nu este un cuvânt cheie și variabila globală), în cazul în care cineva ar scrie după executarea acestui cod:

apoi (în cazul în care f -tsii nici un argument pe care le iau valoarea nedefinită) vom avea valoare reală nedefinită, iar valoarea reală a ferestrei.

Exclusiv pentru utilizator @theshock:

Principalul dezavantaj al acestui răspuns nu este în faptul că el - incorecte în esența sa. Nu, sunt sigur că cartea din care ați copiat toate acestea pot fi foarte bine (apropo, ce este această carte?), Dar nu există nici un răspuns la întrebarea în subiect, care a dat, de exemplu, Spectre.

Tocmai ați confirmat că răspunsul nu a citit (sau citit la întâmplare), și, prin urmare, spune ce vine în minte (să-l puneți blând).

Adică, nu știi ce fel de carte, dar spune cu încredere că a fost copiat - fără să știe cum? Și face o declarație clară?

Citez din nou (pentru a confirma că nu ați citit răspunsul):

Apropo, ceea ce este această carte?

Yeshe UPDATE 1. Există o linie:

A fost lipiți o copie? Pf, cu mult timp înainte - în Google, găsiți aici cărțile (dacă doriți):

Fă-o. Nu fi leneș. Deschideți. Înainte. Găsiți rânduri în cazul în care la fel cum este descris în răspunsul. Dacă găsiți cel puțin ceva similar (care, desigur, nu se va întâmpla), atunci am o problemă cu capul.

În cazul în care nu face acest lucru:

P.S JS odată ce am fost învățat aceste cărți, iar eu pot spune sigur că:

Dar nu iau cuvântul meu pentru asta - asigurați-vă că pentru a verifica it afară.

Și un alt lucru: În cazul în care lucrurile se numesc „un nume“ - aceasta nu înseamnă că toți oamenii copiați și inserați una de alta. În acest caz, a fost doar o frază

Aceasta se numește închiderea sau Wrapper. După cum sa menționat mai sus, prin utilizarea obiectelor globale originale în interiorul corpului funcției, închidere voziozhnosti departe nu se limitează la acest lucru. Aceasta este doar o mică parte a cererii

Aceasta este baza acestui fapt, răspunsul întreg nu au absolut nimic de-a face cu (funcția ()) (param1, param2). - și anume întrebarea din titlu?

Și toate exemplele în nici un fel de legătură cu problema titlului?

Data viitoare când critica pe cineva:

1) În primul rând, să facă o listă de specifice și clare „neînțelegeri“.

2) Asigurați-vă că pentru a colecta dovezi concrete pe ele.

și înainte - dreapta „în față“, după cum spun ei.

Dar nu ai făcut-o. și am fost o aroganță uimit pic, nefondate și, prin urmare, a pus tu -1 personal de la mine.

Ecluses @Shock utilizator. partea 2

Aceasta se numește închiderea sau Wrapper.

După cum sa menționat mai sus, prin utilizarea obiectelor globale originale în interiorul corpului funcției, închidere voziozhnosti departe nu se limitează la acest lucru. Aceasta este doar o mică parte a cererii

Ai confirmă încă o dată că nici citește răspunsul - dar, în timp ce faci unele concluzii absurde cu privire la tot ceea ce se întâmplă din nou.

Expresia / Expresia „Așa cum sa indicat mai sus,“ - oznachachaet că ceva de genul celui care tocmai a fost descris exemplu particular este un relativ posleduschego explicație / exemplu.

Fără a intra în detaliile problemei.

Adică, a fost necesar să se înceapă imediat explica despre modul în care „izolate izolate /“ variabile în exemplul, fără a răspunde la întrebarea CE ESTE? o persoană care vede „prima dată de proiectare?!“ introducând astfel și mai confuz? - IMHO

Aceasta se numește închiderea sau Wrapper. exact la fel ca expresie Funcție Imediat-Invocat

Dar numele Imediat-Invocat Funcția Expresia nu este în întregime corectă (și nu întotdeauna logic, este cazul), pentru că obținem imediat o contradicție dacă vom atribui pur și simplu, această variabilă.

Acesta este modul în care: var foo = (funcția ()<> ) ();

Ce este contradicția? Este acel tip Imediat neinvocate expresie Funcție mai imediat-a invocat. așa cum va fi numit numai în cazul în care apelul explicit, nu la o imediată-independentă.

Să sperăm că aceste exemple au făcut clar faptul că termenul de „auto-executare“ este oarecum înșelătoare, deoarece nu este funcția care este ea însăși de executare, chiar dacă funcția este executată

Oricine crede că închiderea Wrapper sau incorecte - repeta (deja de mai multe ori) - toate: 1) În primul rând, în Google Book leagăn

După cum sa indicat mai sus (de la utilizator @Rules răspuns) prin utilizarea obiectelor globale în funcția originală a corpului, de închidere voziozhnosti departe nu se limitează la acest lucru. Aceasta este doar o mică parte a cererii.

Totul se face în așa fel încât să nu dezordona spațiul de nume la nivel mondial

-- nu este așa. M-am gândit la fel când am început

Scop №1 - Imitație NameSpace

Din moment ce el standardul ECMAScript nu oferă suport pentru namespace - (namespace), închiderea acestora emulează de importul și exportul de variabile globale.

Totul se reduce la o punere în aplicare neymspeysov simulat.

Este ușor de verificat în practică:

După cum puteți vedea, funcția sayTest () va afișa mesaje diferite (nu va fi suprascris) - înseamnă o funcție cu același nume funcționează în mod diferit (nota pentru programatorii C ++ nu este supraîncărcată).

Scopul №2 - clasa Simulare

Deoarece, ECMAScript 1.7 nu oferă clase de punere în aplicare vozmosti „pe linie“, dezvoltatorii trebuie să simuleze clase în ceea ce privește funcțiile, obiecte.

Este aproape un ekvivaletno literal:

Acest lucru este incomod, creând dependență absurd (în numele variabilei) și ca o consecință - este pur și simplu un anti-model.

În timp ce într-o sală de clasă simulat prin închidere poate apela funcții nu în funcție de variabila, cum ar fi aceasta:

Acest lucru este util, ușor de citit și ușor de depanare.

Scopul №3 - modificarea variabilelor existente (cum ar fi obiecte), fără reflectare a spațiului global actual. În acest exemplu:

Acest exemplu este foarte util atunci când scrieți biblioteci, deoarece:

1) Permite moștenesc / extind obiectele existente numai atunci când este conectat prin - atributul src. 2) Având în vedere că punerea în aplicare va fi în organism de închidere, aceasta nu va reflexiv despre spațiul de nume la nivel mondial - care să asigure că nu vor exista functii suprascrierea accidentale sau variabile.

Atunci când este utilizat în cele mai multe cazuri, dezvoltatorii folosesc pentru înfășurare pentru a defini obiectele sale din interiorul bibliotecii pentru a scrie. Exemple - prototype.js. Jquery.js. Backbone.js.

De exemplu, în Jquery-UI. fiecare modul de închidere încheiat în / Wrapper / Imediat-Invocat Expression Function.

  • Folosit pentru a scrie biblioteci (TIP)

Dar nu abuza de ea, cu toate acestea. Utilizați înveliș, doar pentru un motiv anume, dacă este necesar, deoarece. 1) Ei au nevoie de un pic mai multă memorie (numai în cazul în care acestea nu sunt suficiente) 2) Ele pot face dificil de înțeles codul.

Toate discuțiile au fost eliminate

Singurul răspuns complet, corect și succintă a fost în Spectre. Și este necesar să se asculte. O tehnica care este utilizat în subiect numit Imediat-Invocat Expression Function și utilizate pentru callback asincrone în interiorul buclei pentru a lega la elementul corect.

ivanpopelyshev înțeleg întrebarea, dar a condus doar un exemplu, nu explica idei

Raspuns Reguli în general de către. Desigur, uneori utilizate pentru această funcție, dar nu este cazul:

Acest lucru se face în așa fel încât să nu polueze variabilele locale și domeniul de aplicare la nivel mondial și copii ale Met exemplul cel mai important la nivel mondial în JQuery.

Și cel mai important heavy_metal_fan de răspuns. care este atât de critică Spectre și pe bună dreptate. Mi-am amintit de ani drepte de tinerețe turbulentă, anul 2 de facultate, când am înțeles profund nenorocita asta de „Modelarea economico-matematică“, dar este necesar să se scrie examen și scrie totul va cădea în pinteni.

Problema principală cu acest răspuns - o mare cantitate de apă și a informațiilor complet la stânga. Ea a copiat fara minte bucata de carte și se vede clar în primele două paragrafe:

Aceasta se numește închiderea sau Wrapper.

După cum sa menționat mai sus, prin utilizarea obiectelor globale originale în interiorul corpului funcției, închidere voziozhnosti departe nu se limitează la acest lucru. Aceasta este doar o mică parte a cererii

Ai ajuns treptat la o frază cheie care este răspunsul corect la întrebarea subiect-starter - Imediat-Invocat Expression Function. dar apoi, în explicațiile din nou alunecat în locul greșit.

Principalul dezavantaj al acestui răspuns nu este în faptul că el - incorecte în esența sa. Nu, sunt sigur că cartea din care ați copiat toate acestea pot fi foarte bine (apropo, ce este această carte?), Dar nu există nici un răspuns la întrebarea în subiect, care a dat, de exemplu, Spectre.