Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数不是javascript中的函数_Javascript - Fatal编程技术网

函数不是javascript中的函数

函数不是javascript中的函数,javascript,Javascript,我试图使用模块模式组织代码,但我发现myComponent不是函数错误。嗯,怎么了 var canva = new fabric.Canvas('canvas'); var myComponent = function(canva) { var init = function() { console.log('init'); }; return { init:init }; }(canvas); myComponent(c

我试图使用模块模式组织代码,但我发现myComponent不是函数错误。嗯,怎么了

var canva = new fabric.Canvas('canvas');
var myComponent = function(canva) {

    var init = function() {
        console.log('init');
    };


    return {
        init:init
    };

}(canvas);

myComponent(canva).init();
尝试:

//并将其用作

 myComponent(null).init();
尝试:

//并将其用作

 myComponent(null).init();
您可以使用以下语法:

var myComponent = function(canva){
   //function body  
 }(canvas);
但是,在对函数进行贴花后,您不必调用该函数,因此,您必须使用以下语法:

var myComponent = function(canva){
   //function body  
 }// remove : (canvas);
您可以使用以下语法:

var myComponent = function(canva){
   //function body  
 }(canvas);
但是,在对函数进行贴花后,您不必调用该函数,因此,您必须使用以下语法:

var myComponent = function(canva){
   //function body  
 }// remove : (canvas);

默认情况下,您可以使用canvas初始化函数,也可以将其作为参数提供,但不能同时提供两者

  var canva = new fabric.Canvas('canvas');
  var myComponent = function(canva){

  var init = function(){
    console.log('init')
  }


  return{
    init:init
  }

}(canva);

myComponent.init();
(如果组件的使用者/客户端不需要配置使用的画布/依赖项,则此变体非常有用)


(如果组件的使用者/客户端需要为组件提供自己的参数化/自定义依赖项,则此变体非常有用)

您可以默认使用画布初始化函数,也可以将其作为参数提供,但不能同时提供两者

  var canva = new fabric.Canvas('canvas');
  var myComponent = function(canva){

  var init = function(){
    console.log('init')
  }


  return{
    init:init
  }

}(canva);

myComponent.init();
(如果组件的使用者/客户端不需要配置使用的画布/依赖项,则此变体非常有用)


(如果组件的使用者/客户端需要为组件提供自己的参数化/自定义依赖项,则此变体非常有用)

长话短说,这是一个解析器问题,您需要用括号包装自调用函数(请参见下面的代码)

当解析器在全局范围内遇到function关键字时,或 在函数内部,它将其视为函数声明(语句), 默认情况下,不作为函数表达式。如果你不明白 告诉解析器需要一个表达式,它会看到它认为是什么 没有名称的函数声明,并引发SyntaxError 异常,因为函数声明需要名称

上述确切措词应归功于:


另外,更改myComponent(canva.init()to
myComponent.init()
myComponent
不是一个函数。

长话短说,这是一个解析器问题,您需要用括号包装自调用函数(请参见下面的代码)

当解析器在全局范围内遇到function关键字时,或 在函数内部,它将其视为函数声明(语句), 默认情况下,不作为函数表达式。如果你不明白 告诉解析器需要一个表达式,它会看到它认为是什么 没有名称的函数声明,并引发SyntaxError 异常,因为函数声明需要名称

上述确切措词应归功于:

另外,更改myComponent(canva.init()
to
myComponent.init()
myComponent
不是一个函数。

function(canva){
是一个IIFE,它返回一个带有单个属性init的对象,init是一个函数……请注意,这意味着myComponent是返回的对象,而不是一个函数
function(canva){
是一个IIFE,它返回一个带有单个属性init的对象,init是一个函数……请注意,这意味着myComponent是返回的对象,而不是函数