📅  最后修改于: 2023-12-03 14:58:59.967000             🧑  作者: Mango
这段代码看起来有些神秘并且让人困惑,它是一个自执行的匿名函数。在这个函数中,b 被赋值为 5,而 a 只存在于函数内部。
在这段代码中定义的变量 a 和 b,只存在于函数内部。因为它们是使用 var 关键字定义的,所以它们的作用域只限于函数内部,无法在全局作用域中访问。
当我们在控制台中尝试访问 b 的值时,会发现它的值为 5。但是当我们尝试访问 a 时,会发现它只存在于函数内部无法访问。
console.log(b); // 输出 5
console.log(a); // 报错:Uncaught ReferenceError: a is not defined
使用 var 关键字定义的变量在函数体的任何位置都是可访问的,这是因为 JavaScript 的“变量提升”机制。
当声明变量时,会在代码执行之前将其提升到作用域的顶部。这些变量在声明之前也可以被访问(但值为 undefined)。
因此,我们可以将变量定义移到函数的顶部,而不是在函数内部使用 var 关键字分别定义:
(function() {
var a;
b = 5;
a = b;
})();
console.log(b); // 输出 5
console.log(a); // 报错:Uncaught ReferenceError: a is not defined
在这个例子中,a 的声明被提升到了函数的顶部,然后 b 被赋值为 5,并最终将其赋值给 a。
虽然这种变量定义方式有效,但并不推荐使用。这是因为它容易造成混乱以及难以维护。因此我们应该尽可能地在我们的代码中明确变量的作用域,以避免不必要的问题。