Этот вид кода обычно генерируется транспиляторами (такими как Babel), чтобы преобразовать современный JavaScript - который использует самые последние дополнения к спецификации - в версию JavaScript, которая более широко поддерживается.
Вот пример, где происходит этот шаблон транспиляции:
Допустим, у нас есть этот оригинальный код перед переносом:
import {myfunc} from "mymodule";
myfunc();
Чтобы сделать этот ES5-совместимый код, вы можете сделать это:
"use strict";
var mymodule = require("mymodule");
mymodule.myfunc();
Но здесь мы должны выполнить myfuncс mymoduleкак thisзначение, которое не происходит в исходном коде. И хотя это не всегда может быть проблемой, лучше убедиться, что функция ведет себя так же, как и в оригинальной версии , даже если эта функция будет использовать thisссылку - насколько необычным или даже бесполезным может быть использование thisin myfunc( потому что и в оригинальной версии это было бы undefined).
Так, например, если исходный код выдаст ошибку из-за this.memberFun()ссылки в функции, он также сгенерирует переданную версию.
Так вот, где оператор запятой используется, чтобы избавиться от этой разницы:
(0, mymodule.myfunc)();
Конечно, в коде, который вы пишете сами, у вас никогда не будет хорошего варианта использования этого шаблона, поскольку вы не будете использовать его thisв myfuncпервую очередь.
bindметод связывает. Здесь это просто изменение контекста. Вы не можете сократить или потерять связывание (связь, созданнаяbind).