js函数提升及变量提升理解

首先我们需要理解什么是提升,在我们的js中,代码的执行时分两步走的,1、解析 2、一步一步执行

那么变量提升就是变量声明会被提升到作用域的最顶上去,也就是该变量不管是在作用域的哪个地方声明的,都会提升到作用域的最顶上去,同样函数提升也是这个道理。

1 变量提升

function test() {
   console.log(a);
   var a = 10;
}
test();//undefined

由于存在变量提升,在解析的时候a还未赋值所以出现输出undefined结果,上述代码执行过程实际上是这样:

function test() {
   var a;
   console.log(a);
   a = 10;
}
test();//undefined

2 函数提升

在js中声明函数有函数声明式和函数表达式,下面是各种声明函数的对比:

// 函数声明
function foo() {
   console.log('function declaration');
}

// 匿名函数表达式
var foo = function () {
   console.log('anonymous function expression');
};

// 具名函数表达式
var foo = function bar() {
   console.log('named function expression');
};

在此处我们需要记住的是只有函数声明式的函数存在提升,并且也将此函数的代码块一块提升,其他的函数声明方式,只是把foo变量进行了提升。

猜你喜欢

转载自blog.csdn.net/qq_30104281/article/details/84070186