关于javascript“类”的函数表达式与函数声明

问题描述

|| 在实现“私有方法”时,何时使用函数表达式代替函数声明有意义?在这两种情况下,函数都是封装的,唯一实际的区别似乎是我无法在构造函数中调用myFunc1。我知道我应该以任何一种方式使用prototype属性,但是我很好奇。
function myClass
{
    myFunc1() //error
    myFunc2() //success

    var myFunc1 = function()
    {
    }

    function myFunc2()
    {
    }
}
    

解决方法

        您可以调用分配给变量的函数,但是必须先分配它,然后才能调用它:
function myClass() {

  var myFunc1 = function() {
  }

  myFunc1() //success
  myFunc2() //success

  function myFunc2() {
  }

}
这些函数是构造函数的局部函数,因此与使用原型不同。要启用公共功能,您需要将其分配给对象:
function myClass() {

  this.myPublicFunc1 = function() {
  }

  this.myPublicFunc2 = myFunc2;

  function myFunc2() {
  }

}

var o = new myClass();
o.myPublicFunc1() //success
o.myPublicFunc2() //success
    ,        如果要立即调用该函数,则必须使用表达式。 这将调用它并将返回值分配给变量:
function myClass {

    var myVar = function() {
       return \'some value\';  // <--- 2. assign the return value to the variable
    }();  // <--- 1. invoke the function immediately

    function myFunc2() {
    }
}
这个调用它,但是将函数本身分配给变量:
function myClass {

    var myFunc1;

    (myFunc1 = function() {  // <--- 1. assign the function to the variable
       // Do something
    })();  // <--- 2. invoke the function immediately

    function myFunc2() {
    }
}
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...