原理
JS的工作方式
- 先解析代码,获取到所有被声明的变量。
- 然后再运行。
换成专业术语就是预处理阶段和执行阶段。
什么是变量提升,它的定义是什么?
变量提升:所有变量的声明语句都会被提升到代码头部。
例子:
console.log(a);
var a = 100;
在控制台执行以上代码并不会报错误,它会打印undefined,其实在js中运行过程是:
var a;
console.log(a);
a = 100;
运行过程中变量a
已经声明,但未被赋值。
变量提升只适用于用var声明的变量
console.log(a);
a = 100;
这种情况,js就会抛出异常:Uncaught ReferenceError: a is not defined
function
函数也是变量,所以它也存在变量提升
例子:
a();
function a(){
console.log(1)
}
由于变量提升的原因,打印结果:1
。
但是如果是赋值语句定义函数,js就会报错:
a();
var a = function a(){
console.log(1)
}
js抛出异常:Uncaught ReferenceError: a is not defined
why?
js运行过程中,它把声明的a
变量提升了,运行代码其实是这样的:
var a;
a();
a = function(){
console.log(1);
};
最后的总结
- 所有的声明都会提升到作用域的最顶上去。
- 同一个变量只会声明一次,其他的会被忽略掉或者覆盖掉。
- 函数声明的优先级高于变量申明的优先级,并且函数声明和函数定义的部分一起被提升。
网友评论