进阶学习js中的执行上下文

  在js中的执行上下文,菜鸟入门基础 这篇文章中我们简单的讲解了js中的上下文,今天我们就更进一步的讲解js中的执行上下文。

1、当遇到变量名和函数名相同的问题。

var a = 10;
function a(){
    console.log(1);
}
a(); //报错

  如果你觉得函数a会覆盖变量a那你肯定是js的新朋友,为什么这里会报错呢?我记得我在基础的执行上下文文章中说过变量声明提前的概念,对这里就是因为这个原因,但是在上面一篇文章中还有一个问题我没有去讲。

  那就是函数的声明比变量的声明顺序更早,上面那段代码相当于下面这段代码:

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

函数a被变量a覆盖了。

  2.当函数在另外一个函数中调用的时候

var a = 1;
function fn1(){
    console.log(a);
}
function fn2(){
    fn1();
}
a = 2;
fn2(); //2

  这里没有输出1是因为fn1嵌套在fn2中,所以函数fn2没有执行的话,fn1自然也没有被执行,又因为fn2是在a赋值为2以后才执行的所以fn1打印的就是2,此时a的值就是2。

到这里,关于js的执行上下文就可以告一段落了,当然如果后期遇到其他的问题,会继续更新到这一文章中,之所以这一章讲解的比较简单是因为有上面一节的基础。

原文地址:https://www.cnblogs.com/pssp/p/5218716.html