匿名函数和带有函数表达式的变量语句有什么区别?
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)
对于以下 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)