为什么在函数内部未定义此全局变量?

时间:2017-11-24 16:42:16

标签: javascript

如果在同一个函数内重新声明和定义了相同的全局变量,为什么在函数内部未定义此全局变量?

var a = 1;
function testscope(){
 console.log(a, 'inside func');
 //var a=2;
};
testscope();
console.log(a, 'outside func');

output:
1 "inside func"
1 "outside func" 

考虑相同的代码,其中var a = 2;内部功能块未注释

var a = 1;
function testscope(){
 console.log(a, 'inside func');
 var a=2; 
};
testscope();
console.log(a, 'outside func');

Output
undefined "inside func"
1 "outside func"

2 个答案:

答案 0 :(得分:4)

这是因为Javascript不像Java那样,变量声明总是被推高。您的第二段代码严格等同于:

var a = 1;
function testscope(){
 var a;  // <-- When executed, the declaration goes up here
 console.log(a, 'inside func');
 a=2;  // <-- and assignation stays there
};
testscope();
console.log(a, 'outside func');

Output
undefined "inside func"
1 "outside func"

答案 1 :(得分:-1)

因为第一个函数上的函数指的是函数中存在的变量a,而你在写入的变量之后写的是。如果你想在一个包含与全局变量相同的变量的函数内部访问全局变量,你应该添加this.a.或者如果要在函数中访问变量a,则必须在调用之前编写变量