当我们返回一个函数时,闭包在Javascript中是如何工作的?
假设我有两个函数test1和test2当我们返回一个函数时,闭包在Javascript中是如何工作的?,javascript,Javascript,假设我有两个函数test1和test2 test1 = function(name){ console.log('Hi, ', name); }; test2 = function(name) { var text = 'Hello ' + name; var say = function() { console.log(text); } return say; } 现在我调用函数并将它们保存到vars var t1 = test1('John'); var
test1 = function(name){
console.log('Hi, ', name);
};
test2 = function(name) {
var text = 'Hello ' + name;
var say = function() { console.log(text); }
return say;
}
现在我调用函数并将它们保存到vars
var t1 = test1('John');
var t2 = test2('John');
这里到底发生了什么?调用时,test2返回“say”,它是指向函数的指针,而不是值。这就是为什么它不会输出任何东西。 要调用函数“say”,您需要执行
test2('john')()
。
在第二对括号中,我们将参数传递给内部的函数。您的函数
test1
返回void,因为没有return
语句
此功能将Hi John
打印到控制台
函数test2
将函数say()
返回控制台,并将其存储在t2
中。这使得t2
成为一种功能。如果您注意test2
中的语法,这是javascript中定义函数的两种标准方法之一。如果你打电话
t2()代码>
您将获得类似于test1('John')的输出代码>:
Hello John
您的第一个函数执行一个代码,不返回任何东西,那么t1将是未定义的。但是第二个函数返回一个函数,然后t2包含一个从未调用过的函数,因此它不会登录到控制台
在下面的代码中,您定义了一个名为test1
的函数,如果您使用test1(“John”),它将打印Hi,John
现在让我们了解下面的代码,下面您定义了一个名为test2
的函数,它:
test2 = function(name) {
var text = 'Hello ' + name;
var say = function() { console.log(text); }
return say;
}
var text='Hello'+name
//定义一个名为text
var say=function(){console.log(text);}
//定义一个名为say
的函数,该函数将把数据记录在控制台的变量text
中
- 然后返回
say
函数。
输出:
输入:=>var t1=test1('John')代码>
输出:=>嗨,约翰
//很简单。
输入:=>var t2=test2('John')代码>
输出:=>undefined
//这里您将把从test2
返回的函数重新分配到t2
。因此,如果您现在键入t2
,那么您将获得函数(){console.log(text);}
作为输出,类似于say
我希望您理解,抱歉英语不好。test1
将执行函数并打印出“Hi John
和返回未定义的
<代码>t1
将是未定义的
test2
将返回一个新的函数
,该函数在文本
上带有一个闭包,并将其分配给t2
t2
现在是一个新的函数
。您需要执行它以获得任何输出,而您还没有这样做。yeti认为您可以调用say liket2()代码>好的完整答案!我发现了一个小错误:t2()打印“Hello John”,而test1(‘John’)打印“Hi,John”。但这对于技术理解来说当然并不重要。
test2 = function(name) {
var text = 'Hello ' + name;
var say = function() { console.log(text); }
return say;
}