Estoy realmente confundido sobre cómo puedo obtener que console.log no sea una función en la línea 1091. Si elimino el cierre a continuación, la línea 1091 no se queja de tal error. Versión de Chrome 43.0.2357.130 (64 bits).

Aquí está el código:
$scope.columnNameChanged = function (tableColumn) {
setDirtyColumn(tableColumn);
//propagate changes to the key fields
for (var i = 0; i < $scope.tableIndexes.length; ++i) {
for (var j = 0; j < $scope.tableIndexes[i].columnName.length; ++j) {
if ($scope.tableIndexes[i].columnName[j] === tableColumn.previousName) {
console.log('xxx', $scope.tableIndexes[i].columnName[j])
(function (i, j) {
$timeout(function () {
console.log($scope.tableIndexes[i].columnName[j])
$scope.tableIndexes[i].columnName[j] = tableColumn.name.toUpperCase();
console.log($scope.tableIndexes[i].columnName[j])
});
})(i, j);
}
}
}
};
javascript
Qian Chen
fuente
fuente

Respuestas:
Solución
Simplemente ponga un punto y coma (
;) después deconsole.log(…).Explicación
El error se puede reproducir fácilmente así:
Está tratando de pasar
function(){}como un argumento al valor de retorno delconsole.log()cual en sí mismo no es una función sino en realidadundefined(verifiquetypeof console.log();). Esto se debe a que JavaScript lo interpreta comoconsole.log()(function(){}).console.logsin embargo es una función.Si no tuvieras el
consoleobjeto, veríasSi tuvieras el
consoleobjeto pero no ellogmétodo, veríasLo que tienes, sin embargo, es
Tenga en cuenta el
(...)después del nombre de la función. Con esos se refiere al valor de retorno de la función.El salto de línea no separa estas dos expresiones como declaraciones separadas debido a las reglas de JavaScript para la inserción automática de punto y coma (ASI) .
Respeta el
;Todos estos fragmentos de código dan como resultado todo tipo de errores inesperados si no hay ningún punto y coma:
Otro ejemplo
A
(...)menudo se ven con el uso de métodos encadenados o accesos de propiedad encadenados:Si no se encuentra esa expresión regular, el método volverá
nully el descriptor de acceso de propiedad ennullprovocará unTypeError: string.match(...) is null- el valor de retorno esnull. En el caso deconsole.log(...)la valor de retorno eraundefined.fuente
console.log()()susconsole.log(...)3 puntos no un error de función, de lo contrario, debe sido simplementeconsole.logno es la función (sólo si se suponía, pero en realidad es)object.method, si está utilizando el valor de retorno, especialmente en un método encadenado, lo seráobject.method(...). Se necesita experiencia para saber por qué siempre debe usar punto y coma y cómo interpretar correctamente los mensajes de error de JavaScript.El error significa que el valor de retorno de
console.log()no es una función. Falta un punto y coma:lo que hace que el seguimiento
(...)del IIFE se interprete como una llamada de función.Compare los mensajes de error de
y
fuente
Actualización 2020
Una posible causa puede ser la declaración de
var consolealgún lugar de su script.Utilizar:
en lugar. Trabajó para mi.
Espero que ayude
fuente
Hay otra forma de encontrar este error.
console.logno es inmutable y es posible sobrescribir accidentalmente el valor.En este caso, vuelva a cargar la página para deshacer el daño.
fuente
Sé que esta no es "LA" respuesta, pero pensé que incluiría lo siguiente
Tenía un área de texto en la página que estaba llamando " consola ". de repente, todos mis scripts de console.log () dieron el error "Uncaught TypeError: console.log no es una función en Object"
... y con razón, porque utilicé un espacio de nombres reservado para mi objeto / var. Me di cuenta de lo que había hecho después de leer su publicación, y por el bien de la posteridad: verificar las convenciones de nombres.
salud
"es siempre un error humano"
fuente
En react-native al menos, la consola parece funcionar sin ninguna importación, por lo que, al eliminar
import console = require('console');oimport console from 'console';desde el principio de mi archivo, lo solucionó. (el VS Code IDE parece agregar eso automáticamente a veces)fuente