我正在练习我的js功能并且遇到了一个对初学者来说不那么明显的错误。问题是函数不能定义我的第二个变量。当我在外面声明我的变量时它起作用,但我对内部感兴趣。这是代码。
(function (firstname, lastname){
var firstN = 'Hubba';
var lastN = 'Bubba';
console.log(firstname + ' ' + lastname)
}(firstN, lastN));
答案 0 :(得分:2)
那是因为在函数内部,变量firstN
和lastN
是函数范围的局部变量。这意味着它们仅在您执行函数时存在于函数内部。
因此,当您尝试通过(function(..){...}(firstN, lastN))
调用函数时,您传递的那些变量超出了函数的范围,因此它们没有被定义。
例如,如果我这样做:
var firstN = 'Hubba_1';
var lastN = 'Bubba_1';
(function (firstname, lastname){
var firstN = 'Hubba_2'; // Not needed
var lastN = 'Bubba_2'; // Not needed
console.log(firstname + ' ' + lastname)
}(firstN, lastN));

您会注意到它会打印Hubba_1
和Bubba_1
。与函数内的变量firstN
和lastN
相比,外部firstN
和lastN
是完全不同的变量。
答案 1 :(得分:0)
您要求在IIFE范围之外的firstN
和lastN
值,这些值在外部范围内为undefined
。了解块范围的工作原理。
// SO snippets don't allow undefined vars so we can mimic it using `window` like would be in the browser
var window = {};
console.log(window.firstN); //undefined
console.log(window.lastN); //undefined
var firstN = "Foo";
var lastN = "Bar";
(function(firstname, lastname){
var firstN = "Happy";
var lastN = "Go Lucky";
console.log(firstname + " " + lastname); // 'Foo Bar'
console.log(firstN + " " + lastN); // 'Happy Go Lucky'
})(firstN, lastN)