javascript学习日记之变量的作用域
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript学习日记之变量的作用域相关的知识,希望对你有一定的参考价值。
```
很显然第一个弹出框并没有如我所想弹出的global而是undefined
这是为什么呢?
其实由于函数作用域特性
函数域始终优于全局域
同名的局部变量会覆盖掉全局变量
而第一次调用alert的时候scope还没正式定义 所以为undefined
以上代码可以理解为:
```
function f(){
var scope;
alert(scope);
var scope ="local";
alert(scope);
};
f();
//等价与函数内变量的声明‘提前‘至函数体顶部
```
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
以上是关于javascript学习日记之变量的作用域的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript之静态作用域与动态作用域 #yyds干货盘点#