【1-3】变量提升和函数提升

变量提升和函数提升

在作用域一节提到过js的执行顺序,先收集声明,做好准备,然后编译代码,再然后执行。也就是说,所有的声明语句无论写在代码的什么位置,在编译执行的时候,都会优先’执行‘,这就是所谓的提升,更精确的说是声明提升

简单说一下

var a = 2 对于这行声明赋值语句,我们必须要有个认识,可以分解成一下:

var a  // 声明语句
a = 2  // 赋值语句

声明语句和赋值语句有个区别,声明语句会进行提升,赋值语句不会

变量提升

代码:

console.log(a) // undefined
var a = 2

实际上:

var a
console.log(a) // undefined
a = 2

代码:

a = 2
var a
console.log(a) // 2

实际上:

var a
a = 2
console.log(a) // 2

函数表达式不提升

代码:

foo() // 2
var foo = function() {console.log(1)}
function foo() {
    console.log(2)
}

实际上:

function foo() {
    console.log(2)
}
foo() // 2
foo = function() {console.log(1)}

变量和函数名同名

函数声明在前,变量声明在后

你可能感兴趣的:(【1-3】变量提升和函数提升)