首页 > 代码库 > javascript学习日记之变量的作用域

javascript学习日记之变量的作用域

 

 
  •  
  •  
  •  
 
 
```
的global是undefined
用alert候scope为undefined
```
function f(){
var scope;
alert(scope);
var scope ="local";
alert(scope);
 
};
f();
//明‘前‘
```
 
 
 
 
 
 
 
 
 
     
  •      
  •        
  •  
     
  •  
  •  
  •  
 
 

javascript学习日记之变量的作用域

javascript学习日记


变量的作用域是往往是人们轻易忽略而又至关重要的问题,尤其是在javascript中。
  1. javascript中变量的作用域有以下特点:

    • 以函数划分的函数域
    • 没有特定的块作用域
    • 没有用var声明的变量就是是全局变量

    下面来看一个具体示例:

 
  1. var global =1;
  2. function f(){
  3. var local = 2
  4. global++;
  5. return global
  6. }
  7. alert(f()) ;//2
  8. alert(f()) ;//3
  9. alert(window.local);//undefined

代码中可以看出声明一个全局变量global 和一个局部变量local; 
而函数f()可以访问外面的全局变量global; 
但是在函数f()外 局部变量local是不存在的 
很显然函数内的代码可以像访问局部变量那样访问全局变量, 
反之则不行

2 函数作用域的声明提前问题

先来看如下代码:
 
  1. var scope ="global";
  2. function f(){
  3. alert(scope);//undefined
  4. var scope ="local";
  5. alert(scope);//local
  6. }
  7. f();

很显然第一个弹出框并没有如我所想弹出的global而是undefined 
这是为什么呢? 
其实由于函数作用域特性 
函数域始终优于全局域 
同名的局部变量会覆盖掉全局变量 
而第一次调用alert的时候scope还没正式定义 所以为undefined 
以上代码可以理解为:

 
  1. function f(){
  2. var scope;
  3. alert(scope);
  4. var scope ="local";
  5. alert(scope);
  6. };
  7. f();
  8. //等价与函数内变量的声明‘提前‘至函数体顶部
 
 
 
 
 2016-11-20 10:14 字数 阅读 8


javascript学习日记之变量的作用域