函数内部未定义IIFE参考错误变量?

时间:2018-01-07 17:08:17

标签: javascript

我正在练习我的js功能并且遇到了一个对初学者来说不那么明显的错误。问题是函数不能定义我的第二个变量。当我在外面声明我的变量时它起作用,但我对内部感兴趣。这是代码。

(function (firstname, lastname){
    var firstN = 'Hubba';
    var lastN = 'Bubba';
    console.log(firstname + ' ' + lastname)
}(firstN, lastN));

2 个答案:

答案 0 :(得分:2)

那是因为在函数内部,变量firstNlastN是函数范围的局部变量。这意味着它们仅在您执行函数时存在于函数内部。

因此,当您尝试通过(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_1Bubba_1。与函数内的变量firstNlastN相比,外部firstNlastN是完全不同的变量。

答案 1 :(得分:0)

您要求在IIFE范围之外的firstNlastN值,这些值在外部范围内为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)