我真的很困惑,我怎么能得到console.log不是第1091行的功能。如果我删除下面的闭包,第1091行不会抱怨这样的错误。 Chrome版本43.0.2357.130(64位)。
以下是代码:
$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);
}
}
}
};
答案 0 :(得分:139)
只需在;
... console.log(
后添加分号()
)。
错误很容易重现:
console.log()
(function(){})
它试图将function(){}
作为参数传递给console.log()
的返回值,undefined
本身不是函数,而是实际typeof console.log();
(检查{{1} }})。这是因为JavaScript将其解释为console.log()(function(){})
。 console.log
但是 是一个功能。
如果您没有console
对象,则会看到
ReferenceError:未定义控制台
如果您有console
个对象,但没有log
方法,那么
TypeError:console.log不是函数
然而,你所拥有的是
TypeError:console.log(...)不是函数
注意函数名后面的(...)
。有了这些,它指的是函数的返回值。
;
如果不存在分号,所有这些代码段都会导致各种意外错误:
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
您经常使用链式方法或链式属性访问器来查看(...)
:
string.match(/someRegEx/)[0]
如果找不到该RegEx,该方法将返回null
,null
上的属性访问者将导致TypeError: string.match(...) is null
- 返回值是null
。在console.log(...)
的情况下,返回值为undefined
。
答案 1 :(得分:4)
错误表示console.log()
的返回值不是函数。你错过了一个分号:
console.log('xxx', $scope.tableIndexes[i].columnName[j]);
// ^
使IIFE的以下(...)
被解释为函数调用。
比较
的错误消息> var foo = {bar: undefined};
> foo.bar();
Uncaught TypeError: foo.bar is not a function
和
> var foo = {bar: function(){}};
> foo.bar()();
Uncaught TypeError: foo.bar(...) is not a function
答案 2 :(得分:2)
一个可能的原因可能是在脚本中的某处声明了var console
。
使用:
window.console.log(...);
代替。为我工作。
我希望它有所帮助
答案 3 :(得分:0)
还有另一种方法可以遇到此错误。 console.log
不是不可变的,可能会意外覆盖该值。
console.log = 'hi';
在这种情况下,只需重新加载页面以撤消损坏。
答案 4 :(得分:0)
我知道这不是“ THE”答案,但以为我会在下面提出建议
var console = $( data.message_target );
console.val( console.val() + data.message);
console.scrollTop(console[0].scrollHeight - console.height());
我在被称为“ 控制台”的页面上有一个文本区域。突然,我所有的console.log()脚本都给出了错误“未捕获的TypeError:console.log不是对象上的函数”
...是正确的,因为我为我的对象/变量使用了保留的名称空间。阅读后,我意识到自己做了什么,并且为了后代:仔细检查命名约定。
欢呼
“总是人为错误”
答案 5 :(得分:0)
console
似乎无需任何导入即可工作,因此,从文件开头删除import console from 'console';
对我来说是固定的。