O motivo de usar um
(0, foo.fn)();
é cortar a ligação : a this
não será mais vinculada a, foo
mas será vinculada ao objeto global.
Mas qual é a razão pela qual qualquer código JavaScript (ou código JS do Google) gostaria de cortar a ligação? (e é um anti-padrão ou não?)
javascript
falta de polaridade
fonte
fonte
bind
método vincula. Aqui é apenas uma mudança de contexto. Você não pode cortar ou perder a encadernação (o vínculo criado porbind
).Respostas:
Esse tipo de código geralmente é gerado por transpilers (como Babel), a fim de converter o JavaScript moderno - que usa as adições mais recentes à especificação - em uma versão JavaScript com suporte mais amplo.
Aqui está um exemplo em que esse padrão de transpilação ocorre:
Digamos que tenhamos esse código original antes da transpilação:
Para criar esse código compatível com ES5, você pode fazer o seguinte:
Mas aqui nós executaríamos
myfunc
commymodule
othis
valor, o que não está acontecendo no código original. E, embora isso nem sempre seja um problema, é melhor garantir que a função se comporte da mesma forma que na versão original , mesmo que essa função use umathis
referência - quão incomum ou mesmo inútil esse uso dethis
inmyfunc
pode ser ( porque também na versão original seriaundefined
).Por exemplo, se o código original
this.memberFun()
gerar um erro devido a uma referência na função, ele também lançará a versão transpilada.Portanto, o operador de vírgula é usado para se livrar dessa diferença:
É verdade que, no código que você mesmo escreve, você nunca teria um bom caso de uso para esse padrão, pois não o usaria
this
emmyfunc
primeiro lugar.fonte
require
relacionado ao ES6 ou ES5? Eu costumava pensar que exigir é um módulo de nó.require
é de fato uma função disponível no nó ou fornecida em bibliotecas como browserify, require.js, ... etc. Não está especificamente relacionado ao ES5 / 6. Por outro lado, uma construção de linguagem ES6 + comoimport
não pode ser suportada para o ES5 sem algo como transpilação.modA.fn1
), essas funções realmente não devem ser usadas,this
mas por acidente eles fazem, nós não queremos athis
afetar o módulo de forma alguma como um efeito colateral, então vamos cortar a ligação, torná-lo se comportar como deve comportar-se se é uma função independente