Tudo funciona bem quando escrevi a lógica js em um fechamento como um único arquivo js, como:
(function(win){
//main logic here
win.expose1 = ....
win.expose2 = ....
})(window)
mas quando tento inserir uma função alternativa de log antes desse fechamento no mesmo arquivo js,
window.Glog = function(msg){
console.log(msg)
}
// this was added before the main closure.
(function(win){
//the former closure that contains the main javascript logic;
})(window)
reclama que existe um TypeError:
Uncaught TypeError: (intermediate value)(...) is not a function
O que eu fiz errado?
fonte
if
declaração em umauseEffect()
função React quando recebi o erro "... não é uma função".Para simplificar as regras de ponto e vírgula
Cada linha que começa com um
(
,[
, `, ou qualquer operador (/, +, - são os únicos válidos), deve começar com um ponto e vírgula.Isso impede que um
monstruosidade.
Nota adicional
Para mencionar o que acontecerá: colchetes serão indexados, parênteses serão tratados como parâmetros de função. O backtick se transformaria em um modelo marcado e regex ou números inteiros assinados explicitamente se transformarão em operadores. Obviamente, você pode adicionar um ponto-e-vírgula ao final de cada linha. No entanto, é bom ter em mente quando você está fazendo prototipagem rápida e diminuindo seu ponto e vírgula.
Além disso, adicionar ponto-e-vírgula ao final de cada linha não ajudará no seguinte, portanto, lembre-se de declarações como
O caso acima retornará / continuará / interromperá / ++ / -. Qualquer linter irá capturar isso com código morto ou erro de sintaxe ++ / - (++ / - nunca acontecerá realisticamente).
Por fim, se você deseja que a concatenação de arquivos funcione, verifique se cada arquivo termina com um ponto e vírgula. Se você estiver usando um programa de empacotador (recomendado), ele deve fazer isso automaticamente.
fonte
Caso de erro:
Resultado:
Correção: falta um ponto-e-vírgula (;) para separar as expressões
fonte
Para mim, era muito mais simples, mas demorei um pouco para descobrir. Basicamente, tivemos em nosso .jslib
Acontece que o Unity (emscripten?) Simplesmente não gosta dessa sintaxe. Nós o substituímos por um bom loop for-old e ele parou de reclamar imediatamente. Eu realmente odeio que ele não mostre a linha da qual está reclamando, mas enfim, me engane duas vezes com vergonha.
fonte
(
na próxima linha. Não vejo nada disso no seu caso. A questão não consiste apenas no seu título!Eu enfrentei esse problema quando criei uma nova classe ES2015 em que o nome da propriedade era igual ao nome do método.
por exemplo:
Observe que esta implementação estava no NodeJS 6.10.
Como solução alternativa (se você não quiser usar o chato nome do método 'setTest'), use um prefixo para as propriedades 'particulares' (como
_test
).Abra as Ferramentas do desenvolvedor no jsfiddle .
fonte
Saída: TypeError: (valor intermediário) (valor intermediário) não é uma função * Como corrigir IT -> porque falta a semicolana (;) para separar expressões;
por que esse erro vem ?? Razão: regras específicas para inserção automática de ponto-e-vírgula que recebem padrões ES6
fonte
Quando crio uma classe raiz, cujos métodos defini usando as funções de seta. Ao herdar e substituir a função original, notei o mesmo problema.
isso é resolvido definindo o método da classe pai sem as funções de seta
fonte