作用域链
调用一个方法时,方法首先在自己的作用域中查找变量和方法,若没有找到,将查找上一级作用域链,直至找到最顶层的作用域即window,example:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16var person = {};
person.name = "我";
function editName() {
var newName = "新的名字";
functino changeNewName() {
var oldName = person.name;
person.name = newName;//方法内部可以访问到person、newName、oldName
}
changeNewName();
//此处可访问到的变量有:person、newName
}
//此处访问到的变量有:person
editName();//该作用域链图如下。。。在02/05/jsScope.png
延长作用域
执行环境有两种,全局和局部,可以使用以下两种方式:
- try-catch语句的catch块
- with语句;
with会将指定对象添加到作用域链中,example:1
2
3
4
5
6
7function buildUrl() {
var qs = "?debug=true";
with(location) {//接收location对象
var url = href + qs;//url变量成为函数执行环境的一部分
}
return url;//此处能访问url变量
}