为什么本地范围不引用全局变量?

时间:2016-04-26 08:53:42

标签: javascript variables scope global local

我的本​​地范围有问题。第二个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>

4 个答案:

答案 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);
}