如何使用闭包调用Javascript函数?
版本1如何使用闭包调用Javascript函数?,javascript,closures,Javascript,Closures,版本1 函数sayHello2(名称){ var text='Hello'+名称; var say=函数(){ console.log(文本); }; 还说; } var say2=sayHello2(“大卫”); say2() 在两个代码示例中,都进行了两次函数调用。第一个和第二个示例的区别在于,在第一个示例中,第一个函数调用的结果在进行第二个函数调用之前存储在say2中。第二个示例立即使用sayHello2()中的返回值来调用该返回函数 如果没有return语句,则sayHello2()返
函数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()的返回值来调用该返回函数。”。返回了什么函数?返回值是什么?@user132522sayHello2()
返回对函数的引用。该引用存储在变量say2
中,因此say2()
调用该函数。@user132522我将对答案进行更多解释。@user132522是的,版本2中的第二个()
与版本1中say2
之后的()
完全相同。但是say2()的目的是什么;?我仍然不清楚您所说的“第二个示例立即使用sayHello2()的返回值来调用该返回函数。”。返回了什么函数?返回值是什么?@user132522sayHello2()
返回对函数的引用。该引用存储在variab中