美文网首页
2017-08-09

2017-08-09

作者: 涓生先生 | 来源:发表于2017-08-09 00:22 被阅读0次

    关于变量作用域

    图1

     

    在函数外对一个变量有声明 函数内也有声明 如上图b 则可以把函数内的声明变量b 看作是一个新变量b1 ,与这个函数外部的b就不在有任何关系了。通过下图去再次体会

    图2

    第一个console.info 结果为什么不是‘1’?

    有的人会认为明明我在外面有全局变量 b=1了,此时就是上面说的一个变量名 函数内外都有声明那么就把函数内部的这个变量名默默在心里加上一个1 (看作是b1)与函数外的变量b予以区分;

    测试下自己的理解

    图3

    后面的备注一次是代码执行的步骤 这个如果不清楚可以自己在浏览器每一句加断点然后执行,

    首先第一个 console.info(a);//4 执行的结果是3 原因很简单首先将函数f1()中的声明变量a看成 a1

    图4

    第二个console.info(a);//7 执行的结果是2 这是可能有得疑惑是 a的取值是85行的代码 还是96行的代码呢,是第85行 ,没错!为什么呢?明明是在f1() 里调用的啊? 是 f()的确是在f1() 里调用的但是在定义函数时,就已经确定了函数内部的变量的来源,他不会根据函数被调用的位置发生改变的;

    或者想下 之前是不是把f1()函数里的变量a看成了a1了那f()函数中的a还和 f1()中的a1有什么关系?就好比你家的扫地机器人在地上,遥控器在你手中,按下开关,扫地机器人内置程序是先从他在的地方向左走,他是在你手上遥控器的位置走的么?不是,他是在他身体本身所在的位置开始向左走

    第三个console.info(a);//9 执行结果依然是3 这个应该没有什么疑问,我就按了一下遥控器在回来,对我本身有什么影响么?没有 所以结果和console.info(a);//7 是相同的

    第四个console.info(a);//10 执行结果是2 ,因为在 函数 f()中没有声明变量 a 用到的a是来自外面声明的全局变量var a=1; 函数f()内运算a=a+1 a=2已经改变了全局变量a的值所以执行结果为2

    第五个console.info(b);//11 执行结果为10 函数f()内b=10 ;b是未声明变量所以浏览器会在外添加一个全局变量    var b  ; 的操作 所以b=10;

    相关文章

      网友评论

          本文标题:2017-08-09

          本文链接:https://www.haomeiwen.com/subject/pnzxrxtx.html