假设我有两个函数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 t2 = test2('John');
这里到底发生了什么?
答案 0 :(得分:2)
您的函数test1
返回void,因为没有return
语句
此功能将Hi John
打印到控制台
您的函数test2
将函数say()
返回到控制台并将其存储在t2
中。这使得t2
成为一种功能。如果您注意test2
中的语法,这是在javascript中定义函数的两种标准方法之一。如果你打电话
t2();
您将得到类似的输出test1('John');
:
Hello John
答案 1 :(得分:2)
让我们理解:
在下面的代码中,您定义了一个名为test1
的函数,如果您使用test1('John'),它将打印Hi, John
。
test1 = function(name){
console.log('Hi, ', name);
};
现在让我们理解下面的代码,下面你定义了一个名为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
功能。 <强>输出:强>
输入:=&gt; var t1 = test1('John');
输出:=&gt; Hi, John
//这很直截了当。
输入:=&gt; var t2 = test2('John');
输出:=&gt; undefined
//您在这里重新分配从test2
返回的say
到t2
的函数。因此,如果您现在输入t2
,那么您将获得function () { console.log(text); }
作为输出,类似于say
。
我希望你理解,抱歉英语不好。
答案 2 :(得分:1)
在调用时,test2返回'say',这是一个指向函数的指针,而不是值。这就是为什么它不输出任何东西。
要调用函数'say',您需要执行test2('john')()
。
在第二对括号中,我们将参数传递给函数内部。
答案 3 :(得分:1)
你的第一个函数执行代码并且不返回任何东西然后t1将是未定义的。但是第二个函数返回一个函数,然后t2包含一个从未调用的函数,因此它不会记录到控制台