var 变量提升分析

原理

JS的工作方式

  1. 先解析代码,获取到所有被声明的变量。
  2. 然后再运行。

换成专业术语就是预处理阶段和执行阶段。
什么是变量提升,它的定义是什么?
变量提升:所有变量的声明语句都会被提升到代码头部。
例子:

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);
};

最后的总结

  • 所有的声明都会提升到作用域的最顶上去。
  • 同一个变量只会声明一次,其他的会被忽略掉或者覆盖掉。
  • 函数声明的优先级高于变量申明的优先级,并且函数声明和函数定义的部分一起被提升。

你可能感兴趣的:(var 变量提升分析)