匿名函数和带有函数表达式的变量语句有什么区别?

What is the difference between anonymous function and a variable statement with function expression?

对于以下 2 个函数,我不明白函数 B 在读取脚本时不会 运行 立即像函数 A。

相反,我必须在函数 B.

之后调用它 startTick();
//Function A
(function () {
    console.log("startTick");
    clockSection.textContent = getTime();

})();


//Function B 
var startTick = function () {
    console.log("startTick");
    clockSection.textContent = getTime();

};

由于最终 (),您的第一个函数会立即执行 (IIFE)。第二个必须被称为:startTick()(函数表达式)因为你只是将一个函数分配给一个变量而不是执行它。

IIFE - 立即调用的函数表达式 - 通常用作封装模块或一组代码的方法。它创建一个用作命名空间的闭包。

函数表达式通常用来代替命名函数,但没有实际用途。这是风格问题。

首先声明一个函数:(function(){}) 然后调用它 (function (){})()。请注意函数 A 中函数声明后的括号。它是 callint it。函数 B 没有被调用,只是被声明了。

function func_name(){...} 

这是一个函数声明。您可以通过此语法定义函数的作用。但它不会在声明后立即自动 运行。

每当你想运行你通常通过

调用函数的函数
func_name()

在你在别处声明函数之后。

所以回答你的问题:

函数A: 第一对括号内是函数的声明。然后第二对括号是你实际调用函数的地方。

功能B: 这只是一个声明,它本身不会自动 运行。 所以如果你想 运行 它,通过 func_name()

调用它

希望您清楚这一点。

第一个不只是一个匿名函数,它是一个"Immediately invoked function expression"(或简称IIFE)。

函数本身就是括号里面的东西,它不会自己执行,你通过在括号里面定义它来调用它,然后通过表达式末尾的()调用它,所以在某种程度上,你仍然必须使用 () 就像你对第二个所做的那样,只是,如果你没有那样做,因为它是无名的并且没有存储在变量,常量或 let 中,你会'以后无法引用它来执行它。

第二个其实还是一个匿名函数,你只是把它赋给了一个var,而不是用括号括起来马上调用。

命名函数如下所示:

function startTick(){
    ...
}

注意它没有分配给 var 或任何东西,而是在 function 关键字之后定义的名称。一个重要的区别是您可以在代码中定义它们的行之前调用命名函数(更多相关信息:var functionName = function() {} vs function functionName() {}. More about functions in general here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions