• 你好!欢迎你的到来
  • 关于我们
  • 首页 博客 学习笔记 技术导航 工具
  • 博文分类
    • PHP(43)
    • MySQL(11)
    • Linux(28)
    • html(3)
    • JQuery(4)
    • JavaScript(9)
    • svn(2)
    • CSS(2)
    • seajs(1)
    • go(44)
    • redis(1)
    • nginx(8)
    • mongo(0)
    • java(0)
    • 算法(0)
    • 其他(26)
    • 生活(1)
    专栏
    • Jquery基础教程
      • 文章:(15)篇
      • 阅读:18648
    • shell命令
      • 文章:(42)篇
      • 阅读:65543
    • Git教程
      • 文章:(36)篇
      • 阅读:124478
    • leetCode刷题
      • 文章:(37)篇
      • 阅读:17360
    • 摘要视图
    • 目录视图
    Javascript中变量函数申明优先级
    2016-09-28 21:30 阅读(2824) 评论(0)

    案例一

    console.log(a); //输出function a(){}  
    function a() {};  
    var a=3;  


    案例二

    function a() {};  
    var a=3;  
    console.log(a);//输出3  


    为什么两者输出不一样呢?

    解析:

    针对案例一

    其执行流程可以细化为

    1.首先会申请一个空间,开始申明函数a,然后在执行申明变量a,发现已经有a的声明,于是不进行申明

    2.然后,就执行console.log(a);即输出函数a

    3.最后执行在执行赋值操作,将a=3,这时候函数a就被转为变量类型,并赋值为3。为了验证,可以将程序改为如下


    a();  
    function a() {  
        console.log(5);  
    };  
    var a=3;  
    a();  
    可以发现程序执行结果如下:





    为在赋值之前,a仍然是函数,当执行赋值语句后,a变为3了,执行a()就会报错。

    针对案例二

    同理可以知,首先申明了函数a,然后在执行申明变量a,发现已经有a的声明,于是不进行申明,接下来,执行了赋值语句,将函数a转为变量。最后输出变量a的值


    总结:

    1)函数被申明的优先级高于变量

    2)被声明过的变量名或是函数名不会被重复申明

    3)变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置


    补充

    1.下面代码执行结果为

    var x=0;  
    f();  
    console.log(x);  
    var f=function(){  
        x=1;  
    }  
    f();  
    console.log(x);  
    function f(){  
        x=2;  
    }  
    f();  
    console.log(x);


    答案:2 1 1 




    本文为原创文章,请尊重辛勤劳动,如需转载,请保留本文地址
    http://www.findme.wang/blog/detail/id/166.html

    若您感觉本站文章不错,读后有收获,不妨赞助一下?

    我要赞助

    您还可以分享给朋友哦

    更多
    顶
    2
    踩
    0
    • 上一篇: PHP自带方法验证邮箱、URL、IP是否合法
    • 下一篇: Go语言编程入门教程(一)
    • 查看评论
    • 正在加载中...
    • 留言
    • 亲,您还没有登录,登录后留言不需要审核哦!
      可以使用如下方式登录哦!
  • CSDN | 新浪微博 | github | 关于我们 | 我要留言 | 友链申请
  • 豫ICP备18038193号    Copyright ©lidequan All Rights Reserved