Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript IIFE评估未定义_Javascript_Iife_Iif Function - Fatal编程技术网

JavaScript IIFE评估未定义

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

你好,我是JavaScript的初学者,我正在尝试弄清楚生活是如何工作的,但我仍然有一些问题。在讲座中,我偶然发现了这个示例代码,下面代码的计算结果为“未定义”,而使用“add()”调用函数返回1,我真的不明白为什么,因为函数是一个生命

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初始值设定项

  • 设rhs是对初始值设定项求值的结果
  • 设rval为?GetValue(rhs)
  • 返回对作为参数传递rval和undefined的BindingPattern执行BindingInitialization的结果

  • See

    undefined
    就是您在分配任务后在控制台中看到的内容,如下所示。如果您继续调用
    add()
    之后,您应该会看到输出每次增加1。好的,是的,但有道理,我只是感到困惑,因为这一次它是一个函数表达式,但是的,它仍然是一个声明。但是这是如何工作的,我实际要修改哪一个计数器变量?始终是return语句中的一个,对吗?“var add=”这不是偶然的,我从我们关于JS:D中闭包的讲座中得到了这个例子,但感谢您的参考,我会看一看。啊,很高兴知道,我以前从未听说过工厂函数这个术语!JS中的真函数是(一级)对象。所以您指的是第一行中的变量计数器“let counter=0”“将由return语句中的函数操作?返回(从IIFE)并分配给
    add
    的是…函数,准备随后调用-period;)调用结果函数本身(因此
    add
    )返回
    计数器的值,该值以1递增。