调用Javascript函数返回一个未定义值的函数
我最近学习JavaScript并碰到这段代码。调用Javascript函数返回一个未定义值的函数
function sayIntro(name,age){
var address = "TX";
return function(name,age,address){
console.log("I am "+ name + " \nI am "+ age + " \nfrom "+address);
};
}
sayIntro("john",27)();
按我的理解,结果是不确定的,因为恢复功能前面的两个变量的范围内 不可用。仍然如何获得输出如下?
I am john
I am 27
from TX
内部函数的参数会影响外部函数参数和变量。你可以直接访问内部函数中的变量,因为当它试图找到一个变量时,它从它的作用域开始,如果没有找到,则进入外部作用域,在这种情况下是外部函数的作用域并找到它们。
但是,如果您在内部函数中声明参数,则会创建它们,并且因为您没有为它们传递值,所以它们的值是undefined
。所以你得到undefined
。
或者从内部功能
return function() {
console.log("I am "+ name + " \nI am "+ age + " \nfrom "+address);
};
删除或只是删除address
并调用内部函数,并传递给它的参数。
return function(name, age) {
console.log("I am "+ name + " \nI am "+ age + " \nfrom "+address);
};
...
sayIntro()("john",27);
例
function sayIntro(name,age){
var address = "TX";
return function(){
console.log("I am "+ name + " \nI am "+ age + " \nfrom "+address);
};
}
sayIntro("john",27)();
感谢您的详细解释,我明白发生了什么,因此根据您提到的第二种方式,当调用第一对括号时,不向外部函数传递参数,第二对括号将名称和年龄传递给内部函数对? –
第一次调用返回内部和第二次调用传递参数 –
ok和内部函数充当闭包? –
你只需阴影变量名。将它们重命名为内部函数中的其他内容,并且它工作正常。 – deceze
'sayIntro'的变量仍然在匿名函数的范围内 - 这不是问题。问题是有一组全新的参数具有相同的名称,这些名称不是传递值,并且因为它们具有相同的名称,所以它们隐藏了其他变量。 'return function(){'解决。 – Ryan
谢谢,但为什么这个问题得到减号?问是不是很愚蠢? –