例如下面是一个放在括号中的匿名函数,所以现在函数可以存储为变量并在其他地方调用,如数字2所示,但是如何调用脚本1来运行?如果没有名字,如何识别它?以及如何将匿名函数更改为已定义的函数?
**Number 1**
(function() {
// Do something
})();
**Number 2**
(var funcName = function() {
// Do something
})();
funcName();
答案 0 :(得分:1)
是的,这些是匿名函数,但它们也是立即调用/调用的函数,因此不需要在以后引用名称。
立即调用函数表达式(IIFE)有很多用途,但一种是使用函数来建立不污染全局的命名空间
答案 1 :(得分:1)
第一个函数立即被调用,因为后跟调用函数的()
。
然后,如果您要从()
语句周围删除var
(这是一个错误):
出于同样的原因,第二个函数也会被立即调用。
存储在funcName
中的值(如果它是一个函数,则调用它,如果它不是函数则会导致错误)是第二个函数的返回值 (由您表示为// Do something
的代码定义 - “某事”需要包含“返回函数”。)
如果没有名字,如何确定?
名称仅适用于调试器(在堆栈跟踪等中它们非常非常有用)。要识别要调用的函数,可以像访问任何其他对象或基元一样访问它们(通过变量,属性等)。函数声明只是在当前作用域中创建一个具有匹配名称的变量。