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

时间:2017-11-03 17:21:28

标签: javascript anonymous-function variable-declaration

对于以下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();

};

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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

通常使用函数表达式而不是命名函数,但没有实际意义。这是一种风格问题。

答案 2 :(得分:0)

function func_name(){...} 

这是一个功能声明。您可以通过此语法定义函数的功能。但它在声明之后并没有自动运行。

每当您想要运行该函数时,通常都会通过

调用该函数
func_name()

在其他地方声明了该功能之后。

所以回答你的问题:

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

功能B: 这只是一个声明,它不会自动运行。 因此,如果您想运行它,请通过func_name()

调用它

希望你明白这一点。

答案 3 :(得分:0)

第一个不仅仅是一个匿名函数,它是一个“立即调用的函数表达式”(或简称IIFE)。

函数本身就是括号内的内容,它本身不会执行,你通过在括号内定义它然后通过表达式末尾的()调用它来调用它,所以在就像你对第二个一样,你仍然必须使用(),就是这样,如果你没有这样做,因为它是无名的而不是存储在一个变量中,不变或让它,你会有以后再也无法用它来执行它。

第二个实际上仍然是一个匿名函数,你只是将它分配给var而不是将它括在括号中并立即调用它。

命名函数如下所示:

function startTick(){
    ...
}

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