Todo funciona bien cuando escribí la lógica js en un cierre como un solo archivo js, como:
(function(win){
//main logic here
win.expose1 = ....
win.expose2 = ....
})(window)
pero cuando trato de insertar una función alternativa de registro antes de ese cierre en el mismo archivo 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)
se queja de que hay un TypeError:
Uncaught TypeError: (intermediate value)(...) is not a function
¿Qué hice mal?
fuente
if
declaración en unauseEffect()
función React cuando seguía recibiendo este error "... no es una función".Para simplificar las reglas de punto y coma
Cada línea que comienza con una
(
,[
, `, o cualquier operador (/, +, - son los únicos válidos), debe comenzar con un punto y coma.Esto evita un
monstruosidad
Nota adicional
Para mencionar lo que sucederá: los paréntesis se indexarán, los paréntesis se tratarán como parámetros de función. El backtick se transformaría en una plantilla etiquetada , y las expresiones regulares o enteros con signo explícito se convertirán en operadores. Por supuesto, puede agregar un punto y coma al final de cada línea. Sin embargo, es bueno tener en cuenta cuando realiza prototipos rápidamente y deja caer los puntos y comas.
Además, agregar puntos y comas al final de cada línea no lo ayudará con lo siguiente, así que tenga en cuenta declaraciones como
El caso anterior sucederá para devolver / continuar / romper / ++ / -. Cualquier linter captará esto con código muerto o error de sintaxis ++ / - (++ / - nunca ocurrirá de manera realista).
Finalmente, si desea que funcione la concatenación de archivos, asegúrese de que cada archivo termine con un punto y coma. Si está utilizando un programa de paquete (recomendado), debería hacerlo automáticamente.
fuente
Caso de error:
Salida:
Solución: le falta un punto y coma (;) para separar las expresiones
fuente
Para mí fue mucho más simple, pero me llevó un tiempo resolverlo. Básicamente teníamos en nuestro .jslib
Resulta que Unity (¿emscripten?) Simplemente no le gusta esa sintaxis. Lo reemplazamos con un viejo bucle for y dejó de quejarse de inmediato. Realmente odio que no muestre la línea de la que se está quejando, pero de todos modos, engañarme dos veces la vergüenza.
fuente
(
en la línea siguiente. No veo nada de eso en tu caso. ¡La pregunta no solo consiste en su título!Me enfrenté a este problema cuando creé una nueva clase ES2015 donde el nombre de la propiedad era igual al nombre del método.
p.ej:
Tenga en cuenta que esta implementación estaba en NodeJS 6.10.
Como solución alternativa (si no desea utilizar el aburrido nombre del método 'setTest'), puede utilizar un prefijo para sus propiedades 'privadas' (como
_test
).Abra sus herramientas de desarrollador en jsfiddle .
fuente
Salida: TypeError: (valor intermedio) (valor intermedio) no es una función * Cómo arreglar IT -> porque le falta semi colan (;) para separar las expresiones;
¿Por qué viene este error? Motivo: reglas específicas para la inserción automática de punto y coma a las que se otorgan estándares ES6
fuente
Cuando creo una clase raíz, cuyos métodos definí usando las funciones de flecha. Al heredar y sobrescribir la función original, noté el mismo problema.
esto se resuelve definiendo el método de la clase padre sin funciones de flecha
fuente