Чаму гэтыя два параметру ў крыніцы JQuery для?

Крыніца jQuery заварочваюць у засаўцы, як гэта:

(function(window, undefined) {
   //awesome jQuery library code in here
})(window);

Я не разумею, чаму адзін з гэтых параметраў не патрабуецца.

Так як акно з'яўляецца глабальнай зменнай, чаму гэта павінна быць прыняты ў? Якая мэта пераходу ў глабальны параметр і доступ да яе ўнутры засаўкі з тым жа імем?

Што не вызначана параметр? Чаму не любое значэнне, перададзенае яму?

6
Акно будзе выкарыстоўвацца як мясцовыя ў гэтай галіне, што робіць яго хутчэй атрымаць доступ, я думаю.
дададзена аўтар Ibu, крыніца

1 адказы

Я ўпэўнены, што гэта быў дадзены адказ ужо, але:

  • пераходзячая ў акно а) дазваляе сціску кода munge імя (г.зн. замяніўшы яго адной літары імя зменнай ўнутры ананімнай функцыі) і б) гарантуе, што спасылкі на зменныя ў аб'ект вокны падчас вызначана бібліятэка, толькі ў выпадку, калі хто перавызначаем акно у глабальнай вобласці пасля загрузкі JQuery.

  • <Літый> <р> уключаючы нявызначанаму у якасці аргументу (але не перадаючы значэнне) робіць тое ж самае для не вызначана , дазваляючы зменнай munging і пазбегнуць праблем, калі <код > не вызначана пераазначэння зменнай (так, Javascript дазваляе).

Я лічу, што ў абодвух выпадках гэта, як мяркуецца паскорыць спасылкі на зменную, як гэта робіць і глабальныя зменныя, даступныя ў галіне бачнасці функцыі, якія інтэрпрэтатар будзе шукаць, перш чым шукаць у глабальным маштабе. Але я не магу сабе ўявіць, калі шчыра, што розніца ў прадукцыйнасці тут з'яўляецца істотнай - Я думаю, што самая вялікая праблема, гэтае імя зменнай munging, што робіць для больш кампактнага кода, калі мінімізавана.

11
дададзена
Калі акно быў перагледжаны ў глабальным маштабе, не будзе яна па-ранейшаму будзе redifined, калі вы перадаеце яго ў?
дададзена аўтар Peter Olson, крыніца
цалкам мае сэнс, +1
дададзена аўтар Ibu, крыніца
@PeterOlson я мяркую, то «сціск кода munge» будзе прычынай
дададзена аўтар Ibu, крыніца
@PeterOlson - не, калі ён перавызначаны пазней - гэта фіксуе акно высылкі ў той час бібліятэка jQuery загружаецца, так што наступнае акно махінацыямі не будзе мець ніякага эфекту. Я мяркую, што калі вы перавызначаць акно перад бібліятэкай нагрузак, гэта парушыць, але тады вы заслугоўваеце тое, што вы атрымаеце :).
дададзена аўтар nrabinowitz, крыніца
Задумайцеся пра гэта, не вызначана , можа быць перагледжана, так што гэта абараняе ад гэтага таксама. Абноўлены адказ.
дададзена аўтар nrabinowitz, крыніца