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