何时以及为何使用这些不同的 Java 脚本函数声明格式?

When and why to use these various Java Script function declaration formats?

以下函数声明格式有什么区别? 什么时候用which更正确?

从初学者的角度和高层次(非深度)的角度来看,它们三者的工作原理似乎相同 - 因此这让人感到困惑并提出问题。

1.

const counter1 = function(num) {
    var x = 0;
    while (x < num) {
        console.log(x);
        x ++;
    };
    return 0;
};

2.

function counter2(num) {
    var x = 0;
    while (x < num) {
        console.log(x);
        x ++;
    };
    return 0;
};

3.

const counter3 = (num) => {
    var x = 0;
    while (x < num) {
        console.log(x);
        x ++;
    };
    return 0;
};

他们所有人看起来行为都一样。

实际上,您的三个示例之间存在不少差异。

因此,一方面,您在函数声明中使用 const 时必须小心。

counter1(5); // counter1 is undefined, this will fail
const counter1 = function(num) {
    var x = 0;
    while (x < num) {
        console.log(x);
        x ++;
    };
    return 0;
};

虽然该函数将被提升并可供使用(编辑:技术上 letconst 也被提升,但它们未初始化,因此您无法在声明它们之前访问它们,更多信息 .

counter2(5); // works fine
function counter2(num) {
    var x = 0;
    while (x < num) {
        console.log(x);
        x ++;
    };
    return 0;
};

另请注意,const 禁止重新分配变量,因此您不能稍后再说 const counter1 = {},而您可以使用 function 示例这样做。

function(num) {(num) => { 之间的区别而言,在您的示例中没有区别。但是还是有些区别的……比如

const thisWillFail = () => {
    console.log(arguments.length);
};
const thisWorks = function() {
    console.log(arguments.length);
};

如果您不熟悉 arguments 对象,可以查找信息 here