12 авг. 2010 г.

Честный undefined

В коде jQuery наткнулся на красивый способ получения «честного» undefined:

(function(undefined) {

// тут мы имеем настоящий undefined

})();

Напомню, что глобальный undefined можно легко переопределить:

window.undefined = 'some_value';

Вышеприведенный же способ позволяет иметь в своем коде настоящий, «защищенный» undefined, неподверженный переопределению извне.

Кроме этого, добавляются «бесплатные» бонусы:

  • undefined становится локальным внутри кода, обращение к нему будет быстрее, чем к глобальному undefined
  • внутри такого кода undefined будет пожат обфускаторами кода, в отличие от глобального

По-моему, очень изящно.

3 комментария:

Vii комментирует...

На net tuts'ах выкладывали скринкаст 10 Things I Learned from the jQuery Source

там автор рассказывает про несколько прикольных "фенечек" которые можно откопать в исходниках jquery, в том числе и про underfined. Вдруг пригодится :)

Степан Резников комментирует...

Ща модно вот так писать:

(function(window,document,undefined){ ... })(this,this.document);

:)

Вегед! комментирует...

http://github.com/jashkenas/coffee-script/commit/6555d863284d828d83e57b0258368ff6c3f6c019#src/nodes.coffee-P5

там есть хороший камень про мутабельность undefined