```
很显然第一个弹出框并没有如我所想弹出的global而是undefined
这是为什么呢?
其实由于函数作用域特性
函数域始终优于全局域
同名的局部变量会覆盖掉全局变量
而第一次调用alert的时候scope还没正式定义 所以为undefined
以上代码可以理解为:
```
function f(){
var scope;
alert(scope);
var scope ="local";
alert(scope);
};
f();
//等价与函数内变量的声明‘提前‘至函数体顶部
```
- XiaoNine
- 文件
- 发布更新
javascript学习日记之变量的作用域
javascript学习日记
变量的作用域是往往是人们轻易忽略而又至关重要的问题,尤其是在javascript中。
- javascript中变量的作用域有以下特点:
- 以函数划分的函数域
- 没有特定的块作用域
- 没有用var声明的变量就是是全局变量
下面来看一个具体示例:
var global =1;
function f(){
var local = 2;
global++;
return global;
}
alert(f()) ;//2
alert(f()) ;//3
alert(window.local);//undefined
代码中可以看出声明一个全局变量global 和一个局部变量local;
而函数f()可以访问外面的全局变量global;
但是在函数f()外 局部变量local是不存在的
很显然函数内的代码可以像访问局部变量那样访问全局变量,
反之则不行
2 函数作用域的声明提前问题
先来看如下代码:
var scope ="global";
function f(){
alert(scope);//undefined
var scope ="local";
alert(scope);//local
}
f();
很显然第一个弹出框并没有如我所想弹出的global而是undefined
这是为什么呢?
其实由于函数作用域特性
函数域始终优于全局域
同名的局部变量会覆盖掉全局变量
而第一次调用alert的时候scope还没正式定义 所以为undefined
以上代码可以理解为:
function f(){
var scope;
alert(scope);
var scope ="local";
alert(scope);
};
f();
//等价与函数内变量的声明‘提前‘至函数体顶部
@XiaoNine
2016-11-20 10:14
字数
阅读 8
时间: 2024-10-16 08:56:43