Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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函数?_Javascript_Closures - Fatal编程技术网

如何使用闭包调用Javascript函数?

如何使用闭包调用Javascript函数?,javascript,closures,Javascript,Closures,版本1 函数sayHello2(名称){ var text='Hello'+名称; var say=函数(){ console.log(文本); }; 还说; } var say2=sayHello2(“大卫”); say2() 在两个代码示例中,都进行了两次函数调用。第一个和第二个示例的区别在于,在第一个示例中,第一个函数调用的结果在进行第二个函数调用之前存储在say2中。第二个示例立即使用sayHello2()中的返回值来调用该返回函数 如果没有return语句,则sayHello2()返

版本1

函数sayHello2(名称){
var text='Hello'+名称;
var say=函数(){
console.log(文本);
};
还说;
}
var say2=sayHello2(“大卫”);
say2()
  • 在两个代码示例中,都进行了两次函数调用。第一个和第二个示例的区别在于,在第一个示例中,第一个函数调用的结果在进行第二个函数调用之前存储在
    say2
    中。第二个示例立即使用
    sayHello2()
    中的返回值来调用该返回函数

  • 如果没有
    return
    语句,则
    sayHello2()
    返回
    undefined

  • 这个问题的主张是删除
    say2()行不更改行为,不正确。如果不调用
    say2()
    ,则不会记录任何内容

  • 查看
    sayHello2()

    sayHello2()
    函数返回对调用
    console.log()
    的小函数的引用。因为函数在JavaScript中是对象值,所以对函数的引用与任何其他类型的值一样有效,并且可以存储在变量中或在表达式中使用

    请注意,当创建日志函数时,这是通过
    var
    初始化完成的:

      var say=function(){
        console.log(text);
      };
    
    这与变量say2发生的情况基本相同:

    var say2=sayHello2("David");
    
    除了这里,在
    =
    符号的右侧有一个函数调用,而不是函数实例化

    声明

    say2();
    
    因此,调用从调用
    sayHello2()
    返回的小日志函数

    第二个代码示例执行相同的操作:

    sayHello2("David")();
    
    除了返回的函数引用没有中间存储。相反,引用会立即用于进行第二个函数调用

    在第一个版本中,计算进行的函数调用:

    var say2 = sayHello2("David"); // First function call
    say2(); // Second function call
    
    在第二个版本中:

    // First          // Second
    sayHello2("David")();
    
    在JavaScript中,表单的一种表达式

    something()
    
    总是意味着,“将
    something
    解释为对函数的引用,并调用它(不传递参数)。”如果
    something
    不是对函数的引用,则会出现异常。所以在版本2中,我们的
    东西是
    sayHello2(“David”)
    。因为后面有第二组空括号,这意味着我们告诉JavaScript进行另一个函数调用

  • 在两个代码示例中,都进行了两次函数调用。第一个和第二个示例的区别在于,在第一个示例中,第一个函数调用的结果在进行第二个函数调用之前存储在
    say2
    中。第二个示例立即使用
    sayHello2()
    中的返回值来调用该返回函数

  • 如果没有
    return
    语句,则
    sayHello2()
    返回
    undefined

  • 这个问题的主张是删除
    say2()行不更改行为,不正确。如果不调用
    say2()
    ,则不会记录任何内容

  • 查看
    sayHello2()

    sayHello2()
    函数返回对调用
    console.log()
    的小函数的引用。因为函数在JavaScript中是对象值,所以对函数的引用与任何其他类型的值一样有效,并且可以存储在变量中或在表达式中使用

    请注意,当创建日志函数时,这是通过
    var
    初始化完成的:

      var say=function(){
        console.log(text);
      };
    
    这与变量say2发生的情况基本相同:

    var say2=sayHello2("David");
    
    除了这里,在
    =
    符号的右侧有一个函数调用,而不是函数实例化

    声明

    say2();
    
    因此,调用从调用
    sayHello2()
    返回的小日志函数

    第二个代码示例执行相同的操作:

    sayHello2("David")();
    
    除了返回的函数引用没有中间存储。相反,引用会立即用于进行第二个函数调用

    在第一个版本中,计算进行的函数调用:

    var say2 = sayHello2("David"); // First function call
    say2(); // Second function call
    
    在第二个版本中:

    // First          // Second
    sayHello2("David")();
    
    在JavaScript中,表单的一种表达式

    something()
    

    总是意味着,“将
    something
    解释为对函数的引用,并调用它(不传递参数)。”如果
    something
    不是对函数的引用,则会出现异常。所以在版本2中,我们的
    东西是
    sayHello2(“David”)
    。因为后面有第二组空括号,这意味着我们告诉JavaScript进行另一个函数调用。

    唯一的区别是将第一步存储到变量中,然后调用它。第二种方法就是不使用变量。唯一的区别是将第一步存储到变量中,然后调用它。第二种方法就是不使用变量,但say2()的作用是什么呢;?我仍然不清楚您所说的“第二个示例立即使用sayHello2()的返回值来调用该返回函数。”。返回了什么函数?返回值是什么?@user132522
    sayHello2()
    返回对函数的引用。该引用存储在变量
    say2
    中,因此
    say2()
    调用该函数。@user132522我将对答案进行更多解释。@user132522是的,版本2中的第二个
    ()
    与版本1中
    say2
    之后的
    ()
    完全相同。但是say2()的目的是什么;?我仍然不清楚您所说的“第二个示例立即使用sayHello2()的返回值来调用该返回函数。”。返回了什么函数?返回值是什么?@user132522
    sayHello2()
    返回对函数的引用。该引用存储在variab中