函数会形成一个局部作用域,如果局部作用域使用了某一个变量,会先在本作用域中进行查找。如果查找到已经定义了,那么就使用本作用域定义的变量。如果没有查找到,会一层一层往上一级作用域中查找并使用;
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>变量和作用域</title>
</head>
<body>
<script type="text/javascript">
var userAccount="user";
function info(){
var userAccount="user2";
var sex="male";
console.log(userAccount);
function info2(){
userAccount="user3";
var age=20;
console.log(sex);
}
info2();
}
info();
console.log(userAccount);
</script>
</body>
</html>
上面例子中,调用info函数,info中输出userAccount。因为info函数里面定义了变量userAccount且赋值为’user2’,所以输出’user2’。 info中调用了info2函数,info2中修改了userAccount的值,但是它内部并没有使用var定义这个变量,所以会向上一层作用域 info中查找此变量,即userAccount=‘user3’修改的是 info中的局部变量userAccount。后面又输出了变量sex,同理,查找的是info中的变量sex,输出’male’。最后全局作用域下面输出全局变量userAccount,全局变量并没有被修改,所以输出的是’user’。