概念上说,全局变量就是函数外部定义的变量;局部变量是函数内部定义(var)的变量,外部无法访问。
exp1:
var setPerson=function(person){ person.name="kevin"; person={name:"nick"};}; var person={name:"alan"}; setPerson(person); alert(person.name);
最后输出的是’kevin’.
理解:
在serperson中最后增加alert(person.name)
可以观察到,输出为‘nick’。
person={name:"nick"};
相当于是定义了一个局部变量person,跟最后输出没有关系。而person.name="kevin";
则是修改了全局变量person的键‘name’的值,所以最后输出会变为‘kevin’。
exp2:
var a = 1; function toTry() { window.alert(a); //undefinedvar a = 2; window.alert(a); //2} toTry();
理解:
按照javascript作用域链的原理,当一个变量在当前作用域下找不到该变量的定义,那么javascript引擎就会沿着作用域链往上找直到在全局作用域里查找。
首先这段程序涉及到了以下三个概念:执行环境、变量对象、作用域链 。
js的执行环境分为:全局的(浏览器的话就是window执行环境)