我最近在学习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
答案 0 :(得分:0)
内部函数的参数会影响外部函数参数和变量。你可以只访问内部函数中的变量,因为当它试图找到一个变量时,它会从它的作用域开始,如果没有找到则转到外部作用域,在这种情况下是外部函数的作用域并找到它们。
但是如果你在内部函数中声明参数,它们是成立的,并且因为你没有为它们传递值,它们的值是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)();