O código é o seguinte:
<body>
<a href="javascript:;" id="test">hello</a>
</body>
<script type="text/javascript">
document.getElementById("test").addEventListener("click", function () {
test()
}, false)
function test() {
var postTypes = new Array('hello', 'there')
(function() { alert('hello there') })()
}
</script>
Isso vai lançar um:
"TypeError não capturado: o objeto não é uma função"
Se eu envolver a chamada / invocação de função anônima em outro conjunto de parênteses, ele executará o alerta, mas ainda assim fornecerá um erro. Se eu colocar um ponto e vírgula após a definição de "var postTypes", tudo bem.
Fui levado a acreditar que o javascript não requer ponto-e-vírgula, então estou supondo que há algumas regras de associatividade estranhas de aplicação de função que não estou entendendo totalmente. Por que estou recebendo este erro?
javascript
PolandSpring
fonte
fonte
Respostas:
JavaScript requer ponto-e-vírgulas, é só que o interpretador irá inseri-los para você nas quebras de linha, sempre que possível * .
Infelizmente, o código
se não resultar em um erro de sintaxe, por isso não
;
vai ser inserido. (Um exemplo que pode ser executado éPara evitar surpresas como essa, treine-se para sempre terminar uma frase com
;
.* Esta é apenas uma regra prática e nem sempre verdadeira. A regra de inserção é muito mais complicada. Esta página do blog sobre inserção de ponto e vírgula tem mais detalhes.
fonte
Seu código passa por um caso em que o processo de inserção automática de ponto-e-vírgula (ASI) não acontece.
Você nunca deve confiar no ASI. Você deve usar ponto-e-vírgula para separar corretamente as instruções:
Seu código estava realmente tentando invocar o objeto array.
fonte
Recebi um erro semelhante e demorei um pouco para perceber que, no meu caso, chamei a variável de array payInvoices e a função também payInvoices. Isso confundiu os AngularJs. Depois de alterar o nome para processPayments (), finalmente funcionou. Só queria compartilhar esse erro e a solução, pois demorei muito para descobrir isso.
fonte
alert
e estava tentando chamar a função de alerta javascript e dizia 'alert is not a function'. Ele estava tentando chamar aalert
variável em vez da função realTente ter o corpo da função antes da chamada da função em seu arquivo JavaScript.
fonte
Eu estava recebendo esse mesmo erro e passei um dia e meio tentando encontrar uma solução. A resposta de Naomi me levou à solução de que eu precisava.
Minha entrada (tipo = botão) tinha um atributo
name
que era idêntico a um nome de função que estava sendo chamado pelo evento onClick. Depois que mudei o atributo,name
tudo funcionou.alterado para:
fonte
Tenho este erro ao compilar e agrupar o TS com o WebPack. Ele compila
export class AppRouterElement extends connect(store, LitElement){....}
nolet Sr = class extends (Object(wr.connect) (fn, vr)) {....}
que parece errado por causa da vírgula ausente. Ao empacotar com Rollup, nenhum erro.fonte