Зачем передавать window в качестве аргумента?

182
04 декабря 2017, 18:44
(function(){...})(); // Это понятно.
(function(){...})(window); // ??? причём без параметра

Например Google Analytics так делает: https://www.google-analytics.com/analytics.js

Answer 1
  1. Минификация

((w, d) => { 
  // Каждое появление w здесь экономит 5 символов 
  w.console.log(d.title); 
})(window, document);

  1. Тестируемость

const somePlugin = (window) => ({ 
  // код плагина использует window 
  log(...args) { window.console.log(...args); } 
}); 
 
 
const mock = {log: [], console: {log: (...args) => mock.log.push(args)}} 
// но реализацию window можно заменить 
let p = somePlugin(mock); 
p.log(1, 2, 3); 
p.log(4); 
 
console.log(JSON.stringify(mock.log));

  1. Микрооптимизации

Доступ к локальной переменной чуть быстрее, чем к глобальной(но это не точно) =)

Answer 2

Если функция использует this – это подразумевает работу с объектом. Но и прямой вызов func() технически возможен, a в режиме use strict вместо глобального объекта this будет undefined.

function func() { 
  "use strict"; 
  alert( this ); // выведет undefined (кроме IE9-) 
} 
 
func();

READ ALSO
Форма отзывов Angular

Форма отзывов Angular

Приложение на angularНе удаётся получить значения из формы отзывов

235
Как правильно перевести массив из PHP в JavaScript?

Как правильно перевести массив из PHP в JavaScript?

ЗдравствуйтеПодскажите пожалуйста, как правильно перевести массив из php в js так, что бы внутри массива order создавались новые объекты, но при...

183
Точное сравнение времени в формате H:i

Точное сравнение времени в формате H:i

Доброго времени! Пробую сверить время в формате ЧЧ:ММ есть функция которая через str_replace вырезает из текущего времени формата Y-m-d H:i:s (2017-12-02...

249
Разбить данные на массивы строк

Разбить данные на массивы строк

ЗдравствуйтеКак разбить спарсенные данные в массивы строк?

263