Сюжеты Matplotlib - полностью избавьтесь от ярлыков тиков

Что это делает, переназначает undefined на undefined внутри этого закрытия. Это безотказно. Поскольку другой код может случайно сделать что-то вроде

undefined = something;
console.log(undefined); // will output 'something'

И это действительно в javascript (если используемый JS-движок не реализовал спецификацию ECMAScript 5, в спецификации ECMAScript 5 undefined нет non-writable, MDN DOC ),

Цитата из MDN New_in_JavaScript 1.8.5 (ECMA 5) Страница

Изменения в глобальном объекты

Глобальные объекты, сделанные только для чтения

Объекты NaN, Infinity и неопределенные глобальные объекты были сделаны только для чтения по спецификации ECMAScript 5.

blockquote>

И из ES5 Annotated Spec в Guthub

ES5 spec Section x15.1.1.3

15.1.1.3 undefined

Значение undefined не определено (см. 8.1).

Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.

blockquote>

Even если global undefined недоступен для записи. У вас может быть локальная переменная с именем undefined и может испортить ваш код (в основном сравнение с undefined). Но это ваша ответственность. У вас могут быть такие коды, как

(function(){
    console.log('Second Case: ');
    var undefined = 'Something';
    console.log(undefined); // Will log `something`
    var a ; // a is undefined
    console.log(a  ===  undefined); // false, as undefined is changed
    // you might expect a === undefined will return true, but as 
    // `undefined` is changed it will return false.
    console.log(a); // undefined
})();

Демо: http://jsfiddle.net/joycse06/V4DKN/

Однако, если undefined можно записать то указанное выше назначение может затруднить многие comparison, сделанные с помощью undefined после этой строки кода, поскольку undefined больше не undefined. Теперь он имеет некоторое значение.

Так как они вызывают эту анонимную функцию, например

( window ) // one argument only

И прием

( window, undefined)  // only window is passed when calling the function
          // Second argument is not passed means it's undefined
          // so undefined is restored to undefined inside that function
          // and no global accidental assignments can hamper jQuery's 
          // code using 'undefined' now

Это означает, что внутри этого закрытия undefined восстанавливается до undefined, так как он не получил никакого значения, тем самым гарантируя использование undefined внутри этой анонимной функции.

Очень хорошая подробная статья об этом http: // javascriptweblog.wordpress.com/2010/08/16/understanding-undefined-and-preventing-referenceerrors/

Я цитирую некоторые строки из вышеупомянутой ссылки статьи, чтобы все было ясно

Что не определено?

В JavaScript есть Undefined (type), undefined (value) и undefined (variable).

Undefined (type) является встроенным Тип JavaScript.

undefined (value) является примитивным и является единственным значением типа Undefined.

Любое свойство, которому не присвоено значение, принимает неопределенное значение. (ECMA 4.3.9 и 4.3.10).

Функция без оператора return или функция с пустым оператором return возвращает undefined. Значение аргумента unsupplied function undefined.

var a;
typeof a; //"undefined"

window.b;

typeof window.b; //"undefined"



var c = (function() {})();

typeof c; //"undefined"



var d = (function(e) {return e})();

typeof d; //"undefined"

undefined (variable) - это глобальное свойство, начальное значение которого не определено (значение). Поскольку его глобальное свойство мы также можем получить к нему как переменной , Для согласованности я всегда буду называть это переменной в этой статье.

typeof undefined; //"undefined"
var f = 2;
f = undefined; //re-assigning to undefined (variable)
typeof f; //"undefined"

Начиная с ECMA 3 его значение можно переназначить:

undefined = "washing machine"; //assign a string to undefined (variable)
typeof undefined //"string"
f = undefined;
typeof f; //"string"
f; //"washing machine"

Излишне говорить , переопределение значений неопределенной переменной является очень плохой практикой, и на самом деле она не разрешена ECMA 5.

13
задан Palmetto_Girl86 4 August 2014 в 17:18
поделиться