JavaScript作用域
2017-04-09 16:29
253 查看
学习JavaScript中,作用域算是比较重要的一块,因为比较抽象,所以很多人都难免模模糊糊,包括我自己也是这样
所以我自己写下了自己的理解,如果有什么不对的,请指出谢谢..js解析顺序和作用域 js的解析顺序是按照作用域来读取代码
那么什么是作用域呢,JavaScript本身就是一个最大的作用域,
每一个函数执行的时候都会产生一个作用域.
很多人认为js的解析顺序是从上到下的,这是错误的
举个例子: var a =10;
alert(a);
代码会弹出10,
alert(a);
var a=10;
这时候会弹出一个undefined,而不是报错,说明什么,说明里面已经有一个变量a,但是没有赋值
每一个域里面代码的解析顺序:
1.定义: 找var (只会找出变量名,但是并不会执行后面的赋值)
找function;
2.执行: 从上往下执行代码;
我们在来看看作用域
我们来看一个例子
<script>
var a=10;//全局变量
</script>
<script>
alert(a)
</script>
结果却显示可以弹出结果,按理说两个域之间是不可以相互跨越的 .
但 var a相当于window.a ,也就是全局变量,
相当于定义在window对象下.
那么我们在举个例子 ,
var a=0;
function mun(){var b=50; }
这个是全局变量么 ,答案肯定不是 ,上面已经说到每个函数都有一个自己的域,
而这个b 的作用域就是这个函数
而a是在script声明的,所以他是全局变量..
作用域链 :
举一个例子:
var a=10;
Fn();
a=20;
function Fn()
{ var b=20; alert(a); alert(b);
}
执行顺序
1: 定义: 找变量 var a
找函数体 function Fn(){
var b=20;
alert(a);
alert(b);
}
2:执行:
a=10;
Fn()==>执行函数,进入Fn()作用域 ====>1:定义 var b
2: 执行:
b=20;
alert(a);//最终弹出10
alert(b) //最终弹出20
在来看一个例子:
var a=10;
var b=15;
Fn();
a=20;
function Fn(){
var a=5;
b=20;
alert(a);
alert(b);
}
alert(a);
alert(b);
解析顺序:
1. 找变量var a;
var b;
找函数体 function Fn(){
var a=5;
b=20;
alert(a);
alert(b)
}
2.执行 a=10;
b=15;
Fn(); ====> 1.var a
2. a=5;
b=20;
alert(a)//5
alert(b)//20=====>返回父级作用域 (script)
a=20;
alert(a); //20
alert(b) //20
注意:函数里面的 b=20;
没有var 所以他是全局变量window.b
所以在全局的b=15 被重新赋值为20;
下面的几个例子我就不写顺序了 ...
var x=5;
a();
function a(){
alert(x);//undefined; var x=10;
}
alert(x); //5
相关文章推荐
- 理解Javascript作用域
- ife task0003学习笔记(一):JavaScript作用域
- JavaScript作用域学习笔记
- JavaScript作用域(Scope)
- JavaScript作用域,内部函数比参数优先级高
- Javascript作用域和闭包
- Javascript作用域、闭包原理以及性能问题
- javascript作用域
- Javascript作用域及每一个函数都有一个call和apply方法,他们是如何改变作用域的!
- JavaScript作用域
- JavaScript作用域和执行环境
- JavaScript作用域闭包(你不知道的JavaScript)
- JavaScript作用域
- javascript作用域与闭包
- javascript作用域与预解析
- JavaScript作用域
- 详解JavaScript作用域
- JavaScript作用域
- javascript作用域
- JavaScript作用域