Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_Class_Closures - Fatal编程技术网

关于javascript的函数表达式与函数声明';类别';

关于javascript的函数表达式与函数声明';类别';,javascript,oop,class,closures,Javascript,Oop,Class,Closures,在实现“私有方法”时,使用函数表达式而不是函数声明什么时候有意义?在这两种情况下,函数都是封装的,唯一实际的区别似乎是我无法在构造函数中调用myFunc1。我知道我应该使用prototype属性,但我只是好奇 function myClass { myFunc1() //error myFunc2() //success var myFunc1 = function() { } function myFunc2() { } }

在实现“私有方法”时,使用函数表达式而不是函数声明什么时候有意义?在这两种情况下,函数都是封装的,唯一实际的区别似乎是我无法在构造函数中调用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() {
    }
}
函数myClass{
var myVar=函数(){

return'some value';//除了您提到的以外,这两个示例之间没有任何区别。我认为上面的两个示例没有任何实际区别。第一个示例在RHS表达式周围加上一组括号会更清楚,第二个示例只是卷积。@RobG:实际上,这两个示例完全不同。第一个示例分配返回值,第二个分配函数本身……是的,我同意一组圆括号会增加第一个的清晰度,但它们不是必需的。我不认为第二个是复杂的。