<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
// 递归:1.找规律 2.找出口
// js执行三部曲 1.语法分析 2.预编译 3.解释执行
// 1. 函数声明整体提升 2.变量 声明提升
// console.log(a);
// function a(){
// var a = 234;
// var a = function(){
// }
// a();
// }
// var a = 124;
// 1. imply global 暗示全局变量:任何变量,如果变量未经声明就赋值,此变量就为全局对象所有(window)
// 2. 一切声明的全局变量,全都是window的属性
// window就是全局的域
// 预编译,发生在函数执行的前一刻
// 1. 创建AO对象 Activation Object
// 2. 找形参和变量声明,将变量和形参名作为AO的属性名,值为undefined
// 3. 将形参和实参统一
// 4. 找函数体里的函数声明,值赋予函数体
// eg1.
// function fn(a){
// console.log(a);
// var a = 123;
// console.log(a);
// function a(){}
// console.log(a);
// var b = function(){}
// console.log(b);
// function d(){};
// }
// fn(1);
// eg2.
// function test(a,b){
// console.log(a);
// c = 0;
// var c;
// a = 3;
// b = 2;
// console.log(b);
// function b(){}
// function d(){}
// console.log(b);
// }
// test(1);
// eg3.
// function test(a,b){
// console.log(a);
// console.log(b);
// var b = 234;
// console.log(b);
// a = 123;
// console.log(a);
// function a(){}
// var a;
// b = 234;
// var b = function(){}
// console.log(a);
// console.log(b);
// }
// test(1);
// eg4.
// global = 100;
// function fn(){
// console.log(global);
// global = 200;
// console.log(global);
// var global = 300;
// }
// fn();
// var global;
// eg5.
// function test(){
// console.log(b);
// if(a){
// var b = 123;
// }
// console.log(b);
// c = 234;
// console.log(c);
// }
// var a;
// test();
// a = 10;
// console.log(c);
// test1.
// function bar(){
// return foo;
// foo = 10;
// function foo(){}
// var foo = 11;
// }
// console.log(bar());
// test2.
// console.log(bar());
// function bar(){
// foo = 10;
// function foo(){}
// var foo = 11;
// return foo;
// }
// console.log(typeof(a)); //undefined
// console.log(typeof(null)); //object
// console.log(typeof(+undefined)); //number
// console.log(11 + "11" * 2) //33
</script>
</body>
</html>