javascript解析顺序和变量作用域
作用域:指的就是一段代码的作用范围。
作用域可以提高程序的逻辑性和安全性,减少名字的冲突
一、变量的作用域
1.全局变量
在代码中任何地方都能够访问得到的变量,拥有全局的作用域。
A.最外层韩都外面定义的变量
B.没有定义直接赋值的变量,拥有全局属性
var name="zhangsan";
function visit() {
document.write(name);
}
visit();
输出 zhangsan
var name="zhangsan";
function visit() {
document.write(name);
function visit2(){
document.write(name);
}
visit2();
}
visit();
输出 zhangsanzhangsan
2.局部变量
只能在固定的代码片段(函数片段)中访问得到。
A.在函数内部定义的变量
var name="zhangsan";
function visit() {
var name="lisi";
document.write(name);
}
visit();
document.write(name);
输出 lisizhangsan
B.参数也是局部变量
function f(num) {
document.write(num);
}
f(1);
document.write(num);
输出 1
然后报错 num is not defined
function f(num) {
var num=2;
document.write(num);
}
f(1);
输出 2
二、javascript预解析顺序
A、<script></script>
B、解析代码运行的环境
C、对标识符(关键字)(var
function
)进行预解析,解析到相应的环境下
D、如果还有<script></script>
再按照上面的步骤依次解析
document.write(fruit);
var fruit="apple";
输出 undefined
var name="zhangsan";
function visit() {
document.write(name);
var name="lisi";
}
visit();
输出 undefined
三、名词解释
(1)环境:
1.宿主环境:(浏览器)
2.执行环境:(所执行的代码在上下文[文档]中的环境)
执行的环境决定了变量和函数的访问权限
A.全局环境
B.函数环境
var name="zhangsan";
function visit() {
var name="lisi";
document.write(name);
function visit2() {
document.write(name);
}
visit2();
}
visit();
输出 lisilisi
C.eval();
(2)作用域
一段代码的作用范围。(作用域由环境决定)
(3)作用域链
在一个执行环境中有权访问的变量和函数,能够有机地进行访问
var name="zhangsan";
var fruit="apple";
function visit() {
var name="lisi";
document.write(name);
function visit2() {
document.write(name);
document.write(fruit);
}
visit2();
}
visit();
输出 lisilisiapple
![](https://img.haomeiwen.com/i5128967/f6dd60a916f2fb88.png)
网友评论