Причина использования
(0, foo.fn)();
чтобы сократить связывание : this
не больше будет связан , foo
но будет связано с глобальным объектом.
Но какова причина, по которой любой код JavaScript (или код Google JS) хотел бы обрезать привязку? (а это анти-паттерн или нет?)
javascript
nonopolarity
источник
источник
bind
метод связывает. Здесь это просто изменение контекста. Вы не можете сократить или потерять связывание (связь, созданнаяbind
).Ответы:
Этот вид кода обычно генерируется транспиляторами (такими как Babel), чтобы преобразовать современный JavaScript - который использует самые последние дополнения к спецификации - в версию JavaScript, которая более широко поддерживается.
Вот пример, где происходит этот шаблон транспиляции:
Допустим, у нас есть этот оригинальный код перед переносом:
Чтобы сделать этот ES5-совместимый код, вы можете сделать это:
Но здесь мы должны выполнить
myfunc
сmymodule
какthis
значение, которое не происходит в исходном коде. И хотя это не всегда может быть проблемой, лучше убедиться, что функция ведет себя так же, как и в оригинальной версии , даже если эта функция будет использоватьthis
ссылку - насколько необычным или даже бесполезным может быть использованиеthis
inmyfunc
( потому что и в оригинальной версии это было быundefined
).Так, например, если исходный код выдаст ошибку из-за
this.memberFun()
ссылки в функции, он также сгенерирует переданную версию.Так вот, где оператор запятой используется, чтобы избавиться от этой разницы:
Конечно, в коде, который вы пишете сами, у вас никогда не будет хорошего варианта использования этого шаблона, поскольку вы не будете использовать его
this
вmyfunc
первую очередь.источник
require
связано с ES6 или ES5? Раньше я думал, что require - это модуль узла.require
действительно является функцией, доступной в узле, или же предоставляется в библиотеках, таких как browserify, require.js и т. д. Это не имеет никакого отношения к ES5 / 6. С другой стороны, языковая конструкция типа ES6 +import
не может быть перенесена в ES5 без чего-то вроде транспиляции.modA.fn1
), то эти функции действительно не следует использовать,this
но если случайно да, мы не хотим,this
чтобы модуль каким-либо образом воздействовал на модуль как побочный эффект, поэтому мы