用于console.log()的嵌套自执行函数java脚本抛出错误

时间:2016-02-18 14:07:27

标签: javascript

用于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)

3 个答案:

答案 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)