用于console.log()的嵌套自执行函数java脚本抛出错误 https://jsfiddle.net/vivek7189/co5oeqcg/
(function(a,b){
console.log("value a:"+a +" value b:"+b)
(function (a,b){
console.log("value a:"+a +" value b:"+b)
})(20,10)
})(30,40)
答案 0 :(得分:2)
JavaScript引擎处理
(function (a,b){
console.log("value a:"+a +" value b:"+b);
})
作为函数调用的参数,因为引擎认为第一个console.log("value a:"+a +" value b:"+b)
返回一个函数,之后你把一些东西放到括号中,但它不是......
您必须让引擎了解您没有尝试将第一个console.log("value a:"+a +" value b:"+b)
的结果作为函数调用,例如在第一个{{1之后添加;
或甚至+
(无论如何)所以引擎理解它的两个语句而不是一个
答案 1 :(得分:0)
考虑这段代码
function foo(a) {
return function(b) {
return a+b;
}
}
您可以像
一样运行var x = foo(2);
var y = x(3); // y == 5
但这可以像“
”那样“简写”var x = foo(2)(3); // x == 5
在您的代码中,您有
console.log("value a:"+a +" value b:"+b);
(function (a,b){
console.log("value a:"+a +" value b:"+b);
})(20,10)
没有分号,javscript猜错了,并认为你正在尝试
console.log('')( ... )
您可以通过几种方式运行代码
minimal - 在代码中添加一个字符
(function(a,b){
console.log("value a:"+a +" value b:"+b); // add this colon
(function (a,b){
console.log("value a:"+a +" value b:"+b)
}(20,10))
})(30,40)
缩短你的代码
(function(a,b){
console.log("value a:"+a +" value b:"+b)
// use different syntax for the inner IIFE
// add a leading !, or +, or various other characters
!function (a,b){
console.log("value a:"+a +" value b:"+b)
}(20,10)
})(30,40)
然而,为了避免任何陷阱,将冒号放在应该的位置
v----- this one is optional, but may be required depending on preceding code
;(function(a,b){
console.log("value a:"+a +" value b:"+b); // here
(function (a,b){
console.log("value a:"+a +" value b:"+b) // here
}(20,10)); // here
})(30,40); // and here
答案 2 :(得分:0)
为;
console.log()
(function(a,b){
console.log("value a:"+a +" value b:"+b);
(function (a,b){
console.log("value a:"+a +" value b:"+b);
})(20,10)
})(30,40)