Estoy realmente confundido sobre cómo puedo obtener console.log no es una función en la línea 1091. Si elimino el cierre a continuación, la línea 1091 no se queja de dicho 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); } } } }; Simplemente coloque un punto y coma ( ; ) después de console.log( … ) .
El error es fácilmente reproducible así:
console.log() (function(){}) Está tratando de pasar function(){} como un argumento para el valor de retorno de console.log() que en sí mismo no es una función pero en realidad no está undefined (verifique typeof console.log(); ). Esto se debe a que JavaScript lo interpreta como console.log()(function(){}) . sin embargo, console.log es una función.
Si no tuviera el objeto de la console , vería
ReferenceError: la consola no está definida
Si tuviera el objeto de la console pero no el método log , vería
TypeError: console.log no es una función
Sin embargo, lo que tienes es
TypeError: console.log (...) no es una función
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) .
;Todos estos fragmentos de código dan como resultado todo tipo de errores inesperados si no hay punto y coma:
console.log() // As covered before () // TypeError: console.log(...) is not a function console.log() // Accessing property 0 of property 1 of the return value… [1][0] // TypeError: console.log(...) is undefined console.log() // Like undefined-3 -3 // NaN let a, b; const array = Array.from({ length: 2 }) // Now, let's use destructuring: [a, b] = array; // ReferenceError: can't access lexical declaration 'array' before initialization let a, b; const array = Array.from({ length: 2 }).fill(1), array2 = Array.from({ length: 2 }) // Now, let's use destructuring. Attempt to get the two 1's from `array` as `a` and `b`: [a, b] = array; console.log(a, b); // undefined undefined Ves (...) a menudo con el uso de métodos encadenados o accesos de propiedad encadenados:
string.match(/someRegEx/)[0] Si no se encuentra ese RegEx, el método devolverá null y el descriptor de acceso de la propiedad en null provocará un TypeError: string.match(...) is null — the return value is null . En el caso de console.log(...) el valor devuelto no estaba undefined .
El error significa que el valor de retorno de console.log() no es una función. Te falta un punto y coma:
console.log('xxx', $scope.tableIndexes[i].columnName[j]); // ^ lo que hace que el siguiente (...) del IIFE se interprete como una llamada de función.
Compare los mensajes de error de
> var foo = {bar: undefined}; > foo.bar(); Uncaught TypeError: foo.bar is not a functiony
> var foo = {bar: function(){}}; > foo.bar()(); Uncaught TypeError: foo.bar(...) is not a function Una posible causa puede ser la declaración de la var console en algún lugar de su secuencia de comandos.
Usar:
window.console.log(...);en cambio. Trabajó para mi.
Espero que ayude