我的本地范围有问题。第二个console.log不显示“a”值,但显示未定义。为什么这样?
<header class="Component-header">
<!-- Some content here is always the same -->
<!-- And some content is different for each use -->
</header>
<div class="Component-body">
<!-- Some content here is always the same -->
<!-- And some content is different for each use -->
</div>
<footer class="Component-footer">
<!-- Some content here is always the same -->
<!-- And some content is different for each use -->
</footer>
答案 0 :(得分:3)
JS将处理您的代码,如:
"use strict"
var a; // undefined
console.log(a); //undefined
a = "a";
function b(){
var a; // undefined
console.log(a); // all is clear, LOCAL variable a is undefined.
a = "a1";
console.log(a); // here is "a1"
}
b();
详细了解如何提升here。
您也可以阅读Function declaration hoisting,这也是JavaScript基础知识的重要组成部分。
答案 1 :(得分:1)
面向对象的JavaScript,第2版:当您的JavaScript程序执行进入新函数时,声明了所有变量 函数中的任何位置都被移动(或提升或提升)到 功能的顶部。这是一个要记住的重要概念。 此外,只有声明被悬挂,这意味着只有声明的存在 变量移到顶部。任何作业都保持原样。 在前面的示例中,局部变量a的声明是 悬在上面。
var a = 123;
function f() {
var a; // same as: var a = undefined;
alert(a); // undefined
a = 1;
alert(a); // 1
}
答案 2 :(得分:0)
吊装是JavaScript将声明移至顶部的默认行为。您的函数范围中有一个a
变量。这就是你执行它时的样子:
"use strict"
console.log(a); //undefined
var a = "a";
function b(){
var a;
console.log(a); // Undefined because a is not set
a = "a1";
console.log(a); // here is "a1"
}
b();
答案 3 :(得分:0)
因为你在函数b中定义了另一个变量,所以它&#39;像这样:
function b() {
var a;
console.log(a);
a = "a1";
console.log(a);
}