我真的很困惑如何才能获得console.log,因为它不是第1091行的函数。如果我删除下面的闭包,第1091行不会抱怨这样的错误。Chrome版本43.0.2357.130(64位)
代码如下:
$scope.columnNameChanged=函数(tableColumn){
setDirtyColumn(tableColumn);
//将更改传播到关键字段
对于(变量i=0;i<;$scope.tableIndexes.length;++i){
对于(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])
(功能(i,j){
$timeout(函数(){
console.log($scope.tableIndexes[i].columnName[j])
$scope.tableIndexes[i].columnName[j]=tableColumn.name.toUpperCase();
console.log($scope.tableIndexes[i].columnName[j])
});
})(i,j);
}
}
}
};
解决方案
只需在控制台.log(
…)
后面加一个分号(;
)
解释
误差很容易重复,如下所示:
console.log()
(函数(){})
它试图将function(){}
作为参数传递给console.log()
的返回值,该值本身不是函数,但实际上是未定义的
(检查typeof console.log();
)。这是因为JavaScript将其解释为console.log()(function(){})
console.log
但是是一种功能
如果没有控制台
对象,您会看到
ReferenceError:未定义控制台
如果您有console
对象,但没有log
方法,您会看到
TypeError:console.log不是一个函数
然而,你所拥有的是
TypeError:console.log(…)不是函数
注意函数名后面的(…)
。对于这些函数,它指的是函数的返回值
由于JavaScript的自动分号插入(ASI)规则,换行符不会将这两个表达式作为单独的语句分开
尊重
如果不存在分号,所有这些代码段都会导致各种意外错误:
console.log()//如前所述
()//类型错误:console.log(…)不是函数
console.log()//访问返回值的属性1的属性0…
[1] [0]//类型错误:console.log(…)未定义
console.log()//类似未定义-3
-3//NaN
让a、b;
常量数组=数组。从({length:2})
//现在,让我们使用分解:
[a,b]=数组;//ReferenceError:在初始化之前无法访问词法声明“数组”
让a、b;
常量数组=数组.from({length:2}).fill(1),
array2=Array.from({length:2})
//现在,让我们使用解构。尝试从'array'中获取两个1作为'a'和'b':
[a,b]=数组;
console.log(a,b);//未定义未定义
另一个例子
通过使用链式方法或链式属性访问器,您经常会看到(…)
:
string.match(/someRegEx/)[0]
如果未找到该正则表达式,该方法将返回null
,并且null
上的属性访问器将导致TypeError:string.match(…)为null
— 返回值为null
。在console.log(…)
的情况下,返回值是未定义的