预解析
两个坑
坑1
//undefined
console。log(num);
var num = 10;
相当于以下代码
var num;
console.log(num);
num = 10;
前两步造成了undefined
坑2
//报错
fn();
var fn = function(){
console.log(22);
相当于以下代码
var fn;
fn();
var fn = function(){
console.log(22);
函数表达式
调用必须写在函数表达式的下面
案例
案例一
var num = 10;
fun();
function fun(){
console.log(num);
var num = 20;
}
相当于执行以下代码
var num;
function fun(){
var num;
console.log(num);
num = 20;
}
num = 10;
fun();
输出结果就是undefined
案例二
var num = 10;
function fn(){
console.log(num);
var num = 20;
console.log(num);
}
fn():
相当于执行以下代码
var num;
function fn(){
var num;
console.log(num);
num = 20;
console.log(num);
}
num = 10;
fn():
输出结果:前一个num undefined;后一个num 20
案例三
var a = 10;
f1();
function f1(){
var b = 9;
console.log(a);
console.log(b);
var a = '123';
}
相当于执行以下代码
var a;
function f1(){
var b;
var a;
b = 9;
console.log(a);
console.log(b);
a = '123';
}
a = 10;
f1();
输出结果:a是 undefined;b = 9
案例四
f1();
console.log(c);
console.log(b);
console.log(a);
function f1(){
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
相当于执行以下代码
function f1(){
var a = b = c = 9;
//相当于var a = 9;b = 9;c = 9;
//b 和 c直接赋值,没有var声明,当全局变量看
console.log(a);
console.log(b);
console.log(c);
}
f1();
console.log(c);
console.log(b);
console.log(a);
输出结果:里面abc都是9
外面c和b都是9,a报错