JavaScript IIFE评估未定义
你好,我是JavaScript的初学者,我正在尝试弄清楚生活是如何工作的,但我仍然有一些问题。在讲座中,我偶然发现了这个示例代码,下面代码的计算结果为“未定义”,而使用“add()”调用函数返回1,我真的不明白为什么,因为函数是一个生命JavaScript IIFE评估未定义,javascript,iife,iif-function,Javascript,Iife,Iif Function,你好,我是JavaScript的初学者,我正在尝试弄清楚生活是如何工作的,但我仍然有一些问题。在讲座中,我偶然发现了这个示例代码,下面代码的计算结果为“未定义”,而使用“add()”调用函数返回1,我真的不明白为什么,因为函数是一个生命 var add = (function() { var counter = 0; return function() { counter += 1; return counter
var add = (function() {
var counter = 0;
return function() {
counter += 1;
return counter
}
})();
//Output: undefined
对于iLife,您需要将匿名函数包装为“()”,然后使用“()”;调用它 它不允许声明。请尝试删除声明
(function() {
var counter = 0;
return function() {
counter += 1;
return counter
}
})();
有关更多信息,请参阅此。
您的生命是一个。在这种情况下,它返回一个函数,这样就可以工作。您可以将结果分配给一个变量,然后运行结果函数。计数器
变量为“”,它将通过返回的函数进行操作(并返回),但“外部世界”无法访问它
//将结果分配给变量
常量add=(函数(){
设计数器=0;
返回函数(){
计数器+=1;
返回计数器;
}
})();
//add是一个函数:执行几次
添加();
添加();
console.log(add());//=>3
您的生活没有问题。您只看到var
语句的结果。示例:
var x=function(){};
//=>未定义
var x=42;
//=>未定义
var x=真;
//=>未定义
赋值表达式将计算为右侧的值:
y=10;
//=> 10
但是var
语句本身不返回任何内容:
vary=10;
//=>未定义
规范的相关部分:
VariableDeclaration:BindingPattern初始值设定项
See
undefined
就是您在分配任务后在控制台中看到的内容,如下所示。如果您继续调用add()
之后,您应该会看到输出每次增加1。好的,是的,但有道理,我只是感到困惑,因为这一次它是一个函数表达式,但是的,它仍然是一个声明。但是这是如何工作的,我实际要修改哪一个计数器变量?始终是return语句中的一个,对吗?“var add=”这不是偶然的,我从我们关于JS:D中闭包的讲座中得到了这个例子,但感谢您的参考,我会看一看。啊,很高兴知道,我以前从未听说过工厂函数这个术语!JS中的真函数是(一级)对象。所以您指的是第一行中的变量计数器“let counter=0”“将由return语句中的函数操作?返回(从IIFE)并分配给add
的是…函数,准备随后调用-period;)调用结果函数本身(因此add
)返回计数器的值,该值以1递增。