javascript:代码执行顺序(预解析)
在学习javascript的时候,总是会遇到由于代码顺序而出现的几个特殊情况,下面我就来介绍三个印象深刻的案例
一、
var a
a = b //出现问题
a = 0
b = 0
console.log(a)
console.log(b)
上面这段代码,由于b没有声明和定义,所以 当 a = b 时,代码出现了问题,这时候,下面代码就不执行来,程序就会报错,什么也得不到
二、
function fn3() {
var a = b = c = 9;
console.log(a);//9
console.log(b);//9
console.log(c);//9
}
fn3();
console.log(c);//9
console.log(b);//9
console.log(a);// 报错
这段代码中 var a = b = c = 9;
表示的意义虽然为给a,b,c赋值为9,但并没有给b,c声明
转化后为:
var a;
c = 9
b = c
a = b
实际上,只给a声明了var ,虽然声明变量是可以省略var,但有var和没有var的意义总归不太一样
在这段代码中,声明了var表示声明局部变量a,而b,c则为全局变量了。
由于全局变量访问不了局部,所以下面的a会报错,而b,c能正常输出。
三、
function fn(a) {
// a = 10;
function a() {
console.log('我是函数 a')
}
// console.log(typeof(a));
// a = 10;
console.log(a);
//a()
}
fn(1)
这段代码执行后得到结果为:
打印函数体a
如果设置了 a = 10,那么a就会被10覆盖,转而
打印10
不管a=10写在函数前或者函数后,都会附上10