摘要: 复制代码function   fn(a){    a();    function a(){        console.log(2);

脚本宝典收集整理的这篇文章主要介绍了

javascript代码实例教程-一个有意思的js实例,你会吗??

脚本宝典小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助你少写一行代码,多一份安全和惬意。

小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。  首先,看看下面一个js例子,你觉得会输出什么呢?

 

复制代码

function   fn(a){

    a();

    function a(){

        console.log(2);

    }

    var a = function(){

        console.log(3);

    }

}

fn(function(){console.log(1)}); 

复制代码

  如果你看不出来,可以copy到浏览器中试试喔。

 

  本人已经在IE,Firefox,360浏览器下测试过,这段代码都输出2。这时,一些人就会有疑问,为什么呢,为什么不是1和3呢,其实,是这样的:

 

var a = function(){console.log(3);}是预先"编译"好的,参数function(){console.log(1)}是在创建执行环境时创建的,而function a(){ console.log(2);}是

在运行时即时"编译"的,所以,参数a覆盖var a, function a()又覆盖参数a,所以最后打印2。可明白?

 

  谢谢1楼和2楼的建议,纠正之前“编译”的说法,因为是不需要“编译”,它是通过js解释器解释执行的。这段代码的执行顺序如下:

 

  

 

复制代码

function   fn(a){

 

    var a;

 

     function a(){

 

        console.log(2);

 

    }

 

    a(); 

 

    a = function(){

 

        console.log(3);

 

    }

 

}

 

fn(function(){console.log(1)}); 

复制代码

 

 

  再看看,下面一个例子,你能猜出结果么?

 

  

 

复制代码

function fn(a) {

            a();

            var a = function () {

                console.log(3);

            }

        }

fn(function () { console.log(1) });

复制代码

  结果是1,相信你也能想到,道理跟前面一样。

 

  再看下面的例子。

 

  

 

复制代码

function fn(a) {

            var a = function () {   

                console.log(3);

            }

 

            a();

        }

fn(function () { console.log(1) });

复制代码

  最后的结果是3,为什么呢,虽然参数a会在创建执行环境时覆盖var a,但是,因为运行时执行a()之前,又执行了一遍var a = function () {   console.log(3);},

 

再次编译,又覆盖参数a,所以最后打印3。(这是我的理解,有不同意见,可以在下面发表评论喔)

 

  希望对你有用喔,有问题可以评论一起交流哦~

 

 

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

总结

以上是脚本宝典为你收集整理的

javascript代码实例教程-一个有意思的js实例,你会吗??

全部内容,希望文章能够帮你解决

javascript代码实例教程-一个有意思的js实例,你会吗??

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过