在Javascript中声明函数的最佳方法

在Javascript中声明函数的最佳方法,javascript,function,Javascript,Function,你可以用这么多不同的方式调用函数,这让我很困惑。让我解释一下 当您开始一个项目或在已经存在的项目上工作时,您希望您的代码具有最高的质量,以便其他开发人员可以在将来轻松地处理它。然而,有这么多不同的方法来创建一个项目,如果你没有经验,你可能会搞得一团糟 让我向您展示一些函数示例以及如何调用它们,以向您展示我的意思 示例1:您只需声明一个普通的函数,然后按名称调用它: function exampleFunc1(){ console.log("hello 1"); } exampleFun

你可以用这么多不同的方式调用函数,这让我很困惑。让我解释一下

当您开始一个项目或在已经存在的项目上工作时,您希望您的代码具有最高的质量,以便其他开发人员可以在将来轻松地处理它。然而,有这么多不同的方法来创建一个项目,如果你没有经验,你可能会搞得一团糟

让我向您展示一些函数示例以及如何调用它们,以向您展示我的意思

示例1:您只需声明一个普通的函数,然后按名称调用它:

function exampleFunc1(){
    console.log("hello 1");
}

exampleFunc1(); //hello 1
示例2:您还可以在对象内部创建函数表达式

var mysteriousObject1 = {
   example2: function(){
       console.log("hello 2");
   }
}
mysteriousObject1.example2(); //hello 2
function mysteriousObject2() {
    function decl() {
        console.log("hello 3");
    }
    decl();
}
mysteriousObject2(); //hello 3
示例3:或函数内部的函数声明

var mysteriousObject1 = {
   example2: function(){
       console.log("hello 2");
   }
}
mysteriousObject1.example2(); //hello 2
function mysteriousObject2() {
    function decl() {
        console.log("hello 3");
    }
    decl();
}
mysteriousObject2(); //hello 3
示例4:您也可以通过这种方式将其作为匿名函数调用:

var example4 = function() {
    console.log("hello 4");
};
example4(); //hello 4
示例5:甚至是这样:

function exampleFunc5() { 
    function example5() {
        console.log("hello 5");
    }
    return {
        example5: example5
    };
}
var call = exampleFunc5();
call.example5(); //hello 5
示例6:您还可以创建一个类并以这种方式调用函数

class User {
  constructor(name) {
    this.name = name;
  }
  helloWorld() {
    console.log('hello ' + this.name);
  }
}

let user = new User("JavaScript");
user.helloWorld(); //hello JavaScript
方法太多了,我不知道该用哪种方法

  • 我通常在我从事的项目中使用现有的方法,但是 哪一个是最好的

    • 如何编写代码使其他开发人员可以轻松访问 将来呢
感谢您的回答。

  • 与示例4(带函数表达式的
    var
    )相比,更喜欢示例1(函数声明)。声明简单、可读且免费
  • 如果需要在一个结构中放置多个函数,请使用示例2(对象文本中的方法)
  • 如果需要创建具有不同状态/数据且工作方式相同的多个对象,请使用示例5(工厂)或示例6(
    class

使用您最熟悉的方法,并且最适合您的项目。我更喜欢示例6,您忘记(或不知道)了很多定义函数的方法。但归根结底,没有理由坚持单一模式(尽管有理由避免某些模式)。只要保持一致。
MystiousObject2
不是一个目标,我更喜欢示例1。这很简单,而且可以预测。将它与
.call()
配合使用时,100%的情况下都能正常工作。我不明白为什么我会被否决。对我来说,这是一个严肃而非常重要的问题。。