考虑以下代码段
function outer(data1){
function inner(){
console.log(data1);
}
return inner;
}
在以下两个函数调用中,第一个有效但第二个无效。
var o = outer("sree");
o(); //works
outer("kumar"); //does not work
请帮助我更好地理解。感谢。
答案 0 :(得分:4)
这样打电话:
outer("kumar")();
outer("kumar");
调用它只会得到内部函数的引用。通过再次放置大括号,它也将调用内部函数。
答案 1 :(得分:1)
你的内部功能没有参数,你需要添加如下:
function outer(){
function inner(data1){
console.log(data1);
}
return inner;
}
您的代码将始终在控制台中登录您创建对象的参数。
答案 2 :(得分:1)
当你调用函数outer("kumar")
时,函数返回一个函数,但是没有调用该函数,这就是为什么这个调用没有登录到控制台的原因。
另一方面,如果你创建一个调用函数var o = outer("sree");
的新变量,正如我所提到的,函数 outer 返回一个函数 inner ,然后您使用创建的新变量o();
调用该函数。
答案 3 :(得分:0)
function outer(data1){
return (function inner(){
return data1;
});
}
函数outer返回另一个函数'inner',这是一种引用,并且执行一个我们需要调用的函数,就像我们调用外函一样。
var o = outer(“sree”);
的console.log(○()); 变量o包含对函数inner的ref。要执行它,我们需要调用(o())。 在你的最后一个动作(console.log(外部(“kumar”)))中,你已经调用了第一个函数,它导致ref为'inner'函数,以获得你必须调用第二个函数的输出。 kumar将被打印,因为'inner'方法在外部函数的范围内。