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