<html lang="en">
<head>
<meta charset="UTF-8">
<title>作用域-预解析</title>
</head>
<body>
<h1>变量的查找就是就近原则,去寻找var定义的变量,当就近没有找到的时候,就去查找外层</h1>
<script>
/*
var a=1;
function fn1(){
alert(a);
var a=2;
}
fn1();
alert(a);
*/
/*第一种 输出undefined 1
预解析:
var a
alert(a)
var a=2;
说明:
第一个alert(a),查找a的时候会先在函数内查找
由于预解析的作用,此时的a是undefined
因此不会查找外面的a
*/
/*
var a=1;
function fn1(){
alert(a);
a=2;
}
fn1();
alert(a);
*/
/*第二种 输出1 2
说明:
第一个alert(a),就近找var声明的变量,没有找到。
这里只是修改了a的值为2。只不过alert(a)还没执行到
*/
/*
var a=1;
function fn1(a){
alert(a);
a=2;
}
fn1();
alert(a);
*/
/*第三种 输出undefined 1*/
/*
var a=1;
function fn1(a){
alert(a);
var a=2;
}
fn1();
alert(a);
*/
/*第四种 输出undefined 1*/
/*
var a=1;
function fn1(){
alert(a);
a=2;
}
fn1(a);
alert(a);
*/
/*第五种 输出1 2*/
/*
var a=1;
function fn1(){
alert(a);
var a=2;
}
fn1(a);
alert(a);
*/
/*第六种 输出undefined 1 */
/*
var a=1;
function fn1(a){
alert(a);
a=2;
}
fn1(a);
alert(a);
*/
/*第七种 输出1 1*/
/*
var a=1;
function fn1(a){
alert(a);
var a=2;
}
fn1(a);
alert(a);
*/
/*第八种 输出1 1
说明:
第一个alert(a),当参数跟局部变量重名时
优先级是等同的
*/
</script>
</body>
</html>