Это делается для того, чтобы гарантировать, что undefined всегда равен undefined
. В более старых версиях спецификации ECMAScript (до ECMAScript 5) неопределенное не было зарезервированным словом, а регулярной переменной. В старых браузерах это будет разрешено, например:
undefined = 2; // Assign a different value to undefined
// Now this statement would be true
if (undefined == 2)
Таким образом, чтобы убедиться, что не определено, на самом деле не определено, даже если какой-либо другой «зло» сценарий был бы переназначен неопределенными с другим значением, необходимо создать параметр, который вызовите undefined, а затем, когда вы вызываете функцию, вы не должны передавать значение этому параметру - таким образом, вы можете быть уверены, что переменная undefined всегда будет неопределенной в вашей функции.
Таким образом, в случае JQuery:
(function($, undefined) { ... })(jQuery);
Они проходят в JQuery и присвоить его переменной $ для удобства, но они не проходят второе значение неопределенного параметра, таким образом, не определен воли быть неопределенным.
Современные браузеры
В современных браузерах, undefined
не является настраиваемым, незаписываемый свойство согласно ECMAScript 5 specification.
Причина, по которой jQuery использует этот метод вместо 'typeof', заключается в том, что он сжимается намного лучше в javascript-минификаторе. – interjay
Thats true, тем не менее typeof является самым безопасным методом. Вы также можете использовать фальшивый характер неопределенного, который был бы самой короткой проверкой для 'undefined', но затенен наличием других значений фальши. – Christoph