JavaScript几个作用域问题

1、

1
2
3
4
5
var a = 0 ;
 
function f(){
  a = 1;
  console.log(a); //全局变量a
1
} <br><br>console.log(a); //全局变量a<br><br>f();

 输出结果为:1 1 ,function中未声明直接赋值的a为作用域window的全局变量,很好理解

2、

1
2
3
4
5
6
var a = 0;
 function test(){
      var a;
      console.log(a); //局部变量a
      a = 1;
      console.log(a); //局部变量a
1
} <br>test(); <br>conosle.log(a); //全局变量a

  输出结果为:undefined 1 0

3、

1
2
3
4
5
6
7
8
9
var a =0;
function test(){
   console.log(a);
   var a = 1;
   console.log(a);
}
 
test();
console.log(a);

  输出结果为:undefined 1 0 

 

总结:

1. JavaScript中只存在两种作用域:全局作用域window和函数作用域function,外部的function domain嵌套内部的function domain,这就是闭包原理;

2. function domain中未使用var事先声明而直接赋值或调用的变量会访问上一层作用域中的同名变量,一直到window全局domain,如果找不到则会报错;

3. var声明变量的执行优先级是最高的,所以在例子3中test()中第一次console.log(a)执行之前,已经事先执行了var a声明,但并未执行a = 1赋值,所以此时输出undefined

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。