问题描述
我真的很困惑,我怎么能得到console.log不是第1091行的功能。如果我删除下面的闭包,第1091行不会抱怨这样的错误。 Chrome版本43.0.2357.130(64位)。
I'm really confused how I can get console.log is not a function on line 1091. If I remove the closure below, line 1091 doesn't complain such error. Chrome Version 43.0.2357.130 (64-bit).
以下是代码:
$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);
}
}
}
};
推荐答案
解决方案
只需在 console.log(
... )之后加一个分号(
。;
) )
Solution
Simply put a semicolon (;
) after console.log(
…)
.
错误很容易重现,如下所示:
The error is easily reproducible like this:
console.log()
(function(){})
它试图传递 function(){}
作为 console.log()
的返回值的参数不是函数,但实际上是 undefined
(检查 typeof console.log();
)。这是因为JavaScript将其解释为 console.log()(function(){})
。 console.log
但是 是一个功能。
It’s trying to pass function(){}
as an argument to the return value of console.log()
which itself is not a function but actually undefined
(check typeof console.log();
). This is because JavaScript interprets this as console.log()(function(){})
. console.log
however is a function.
如果你没有 console
对象,你会看到
If you didn’t have the console
object you’d see
如果您有控制台
对象但不是 log
你看到的方法
If you had the console
object but not the log
method you’d see
但你拥有的是
注意(... )
后面的函数名。有了这些,它指的是函数的返回值。
Note the (...)
after the function name. With those it’s referring to the return value of the function.
如果没有分号,所有这些代码段都会导致各种意外错误:
All these code snippets result in all sorts of unexpected errors if no semicolons are present:
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
另一个例子
你经常看到(...)
使用链式方法或链式属性访问器:
Another Example
You see the (...)
oftentimes with the use of chained methods or chained property accessors:
string.match(/someRegEx/)[0]
如果找不到该RegEx,该方法将返回 null
和 null
上的属性访问器将导致 TypeError:string.mat ch(...)为null
- 返回值为 null
。在 console.log(...)
的情况下,返回值是 undefined
。
If that RegEx isn’t found, the method will return null
and the property accessor on null
will cause a TypeError: string.match(...) is null
— the return value is null
. In the case of console.log(...)
the return value was undefined
.
这篇关于TypeError:console.log(...)不是函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!