<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
</style>
</head>
<body>
<div class="container">
</div>
<script>
//js变量作用域只有全局作用域 和局部作用域
//js作用域链 内部方法可以访问外部方法的变量 一层一层的查找(就近原则)
var num = 10 //全局变量
function fun() {
num = 20 //局部变量
console.log(num) //20
}
fun()
for (var i = 0; i < 12; i++) { //没有块级作用域 es6才有
}
console.log(i) //12 有块级作用域 所以可以访问变量i
//js引擎运行js代码分为两步:预解析和代码执行
//预解析:会把js里面所有的var(变量预解析或变量提升,只提升声明不提升赋值到当前作用域) 还有function提升(函数预解析或函数提升)到当前作用域的最前面
//代码执行: 按照代码顺序从上往下执行
// example 1
// console.log(b) //报错 b is not defined
// example 2
console.log(a) //undefined 此example两行代码js预解析过程相当于 1、 var a; 2、 console.log(a) 3、 a=10
var a = 10
// example 3
fun() //11
function fun() {
console.log(11)
}
// example 4
//fun1() //fun1 is not function 此example两行代码js预解析过程相当于 1、 var fun1; 2、 fun1() 3、 fun1=function(){ console.log(22) }
var fun1 = function() {
console.log(22)
}
// example 5
var c = 22;
fun2() // 此example两行代码js预解析过程相当于 1、 var c; 2、 function fun2(){ var c;console.log(c);c=33} 3、 c=22 4、fun2()
function fun2() {
console.log(c) //undefined
var c = 33
}
// example 6
var d = 44
function fun3() {
console.log(d) //undefined
var d = 55
console.log(d) //55
}
fun3()
//example 6相当于以下代码
// var d;
// function fun3(){
// var d;
// console.log(d);
// d=55;
// console.log(d)
// }
// d=44
// fun3()
// example 7
var e = 18
function fun4() {
var f = 9;
console.log(e); //undefined
console.log(f); //9
var e = '123'
}
fun4()
//example 7相当于以下代码
// var e;
// function fun4(){
// var f;
// var e;
// f=9;
// console.log(e);
// console.log(f);
// e='123'
// }
// e=18
// fun4()
//example 8相当于以下代码
fun5()
console.log(x)
console.log(y)
console.log(z)
function fun5() {
var x = y = z = 99
console.log(x)
console.log(y)
console.log(z)
}
//example 8相当于以下代码
// function fun5() {
// var x ;
// x= y = z = 99 //相当于y z是全局变量
// console.log(x) //99
// console.log(y) //99
// console.log(z) //99
// }
// fun5()
// console.log(x) // 报错x is not defined
// console.log(y)
// console.log(z)
</script>
</body>
</html>