Javascript 未捕获的TypeError:(中间值)(…)不是函数
当我将js逻辑作为单个js文件编写在闭包中时,一切正常,如下所示:Javascript 未捕获的TypeError:(中间值)(…)不是函数,javascript,typeerror,Javascript,Typeerror,当我将js逻辑作为单个js文件编写在闭包中时,一切正常,如下所示: (function(win){ //main logic here win.expose1 = .... win.expose2 = .... })(window) 但是当我尝试在同一个js文件中的闭包之前插入一个日志替代函数时 window.Glog = function(msg){ console.log(msg) } // this was added before the main c
(function(win){
//main logic here
win.expose1 = ....
win.expose2 = ....
})(window)
但是当我尝试在同一个js文件中的闭包之前插入一个日志替代函数时
window.Glog = function(msg){
console.log(msg)
}
// this was added before the main closure.
(function(win){
//the former closure that contains the main javascript logic;
})(window)
它抱怨存在类型错误:
Uncaught TypeError: (intermediate value)(...) is not a function
我做错了什么?错误是由于第三行缺少分号造成的:
window.Glog = function(msg) {
console.log(msg);
}; // <--- Add this semicolon
(function(win) {
// ...
})(window);
错误案例:
var userListQuery = {
userId: {
$in: result
},
"isCameraAdded": true
}
( cameraInfo.findtext != "" ) ? searchQuery : userListQuery;
TypeError: (intermediate value)(intermediate value) is not a function
输出:
var userListQuery = {
userId: {
$in: result
},
"isCameraAdded": true
}
( cameraInfo.findtext != "" ) ? searchQuery : userListQuery;
TypeError: (intermediate value)(intermediate value) is not a function
修复:缺少分隔表达式的分号(;)
userListQuery = {
userId: {
$in: result
},
"isCameraAdded": true
}; // Without a semi colon, the error is produced
( cameraInfo.findtext != "" ) ? searchQuery : userListQuery;
输出:TypeError:(中间值)(中间值)不是函数
*如何修复->因为缺少分隔表达式的semicolan(;)强>
**Fixed**
var handler = function(parameters) {
console.log(parameters);
}; // <--- Add this semicolon(if you miss that semi colan ..
//error will occurs )
(function() { //IIFE
// some code
})();
**已修复**
变量处理程序=函数(参数){
console.log(参数);
}; // 当我创建了一个新的ES2015类,其中属性名等于方法名时,我遇到了这个问题
e、 g:
class Test{
constructor () {
this.test = 'test'
}
test (test) {
this.test = test
}
}
let t = new Test()
t.test('new Test')
请注意,这个实现是在NodeJS 6.10中实现的
作为一种解决方法(如果您不想使用枯燥的“setTest”方法名),可以为“private”属性使用前缀(如\u test
)
在中打开开发人员工具。对我来说,这要简单得多,但我花了一段时间才弄明白。基本上,我们在.jslib中
some_array.forEach(item=>{
做事(项目);
});
原来Unity(emscripten?)就是不喜欢这种语法。我们用一个很好的旧for循环替换了它,它立刻停止了抱怨。
我真的很讨厌它没有显示出它所抱怨的那条线,但不管怎样,欺骗我两次真让我感到羞耻。简化分号规则
以(
,[
,`,或任何运算符(/,+,-是唯一有效的运算符)开头的每一行必须以分号开头,以解释为自己的行。所有其他换行符都是隐式的
就这样,完成了
为什么?
考虑以下几点:
func()
;[0].concat(myarr).forEach(func)
;(myarr).forEach(func)
;`hello`.forEach(func)
;/hello/.exec(str)
;+0
;-0
遵循上述规则可防止将上述内容解释为
func()[0].concat(myarr).forEach(func)(myarr).forEach(func)`hello`.forEach(func)/hello/.forEach(func)+0-0
附加说明
提到将发生的情况:括号将索引,括号将被视为函数参数。反勾号将转换为a,正则表达式将转换为除法,显式+/-符号整数将转换为加减运算符
当然,您可以通过在每个换行符的末尾添加分号来避免这种情况,但即使这样做也不会总是对您有所帮助,因为当您不以分号结尾一行时,它可能会代表您隐式添加一个分号
return // Implicit semicolon, will return undefined.
(1+2);
i // Implicit semicolon on this line
++; // But, if you intended "i++;" and you wrote it like this,
// you need help.
上述情况将发生在return/continue/break/++/--。任何linter都会用死代码或+/--语法错误捕捉到这一点(+++/--实际上永远不会发生)
最后,如果您希望文件连接起作用,请确保每个文件都以分号结尾。如果您使用的是捆绑程序(推荐),它应该自动执行此操作。当我创建根类时,我使用箭头函数定义了根类的方法。在继承和覆盖原始函数时,我注意到了相同的问题
class C {
x = () => 1;
};
class CC extends C {
x = (foo) => super.x() + foo;
};
let add = new CC;
console.log(add.x(4));
这可以通过定义不带箭头函数的父类的方法来解决
class C {
x() {
return 1;
};
};
class CC extends C {
x = foo => super.x() + foo;
};
let add = new CC;
console.log(add.x(4));
在这种情况下,我面临同样的问题:
让品牌、容量、颜色;
出租汽车={
品牌:“奔驰”,
容量:80,
颜色:'黄色',
}
({颜色、容量、品牌}=汽车);
只需在汽车
声明末尾添加一个;
,错误就消失了:
let car={
品牌:“奔驰”,
容量:80,
颜色:'黄色',
}/@阿姆诺斯特朗·乔希跑得更快,答案是一样的:)谢谢你,先生!我的linter自动删除了分号,所有东西都坏了:)太棒了!!!太谢谢你了!!这一次我几乎掉光了头发…我的朋友,这是金色的!这太疯狂了,我非常感谢这篇文章。我在ReactuseEffect()中的if
语句后设置状态
函数,当我不断收到此消息时“…不是函数”错误。我猜你的问题与此有关。这与问题所涉及的情况不同。@CherryDT不是,因为我得到的错误与此完全相同。不,此问题是关于由于语句和(
在下一行。我在你的案例中看不到这一点。问题不仅仅包括标题!这与问题的内容不同。函数。bind
也需要这种策略——谢谢这回答了你的问题吗?