search

Home  >  Q&A  >  body text

javascript - 一个用表达式声明的函数和同名的用函数声明声明的函数 总是执行表达式

var getName = function () {console.log(3)};
function getName (){console.log(4)};
getName()//3

function getName () {console.log(4)};
var getName = function (){console.log(3)};
getName() //依旧是3

怪我咯怪我咯2815 days ago642

reply all(4)I'll reply

  • 大家讲道理

    大家讲道理2017-04-11 12:13:48

    var getName = function () {console.log(3)}; //[1]
    function getName (){console.log(4)};//[2]
    getName()//3 [3]
    
    function getName () {console.log(4)}; //[4]
    var getName = function (){console.log(3)}; //[5]
    getName() //依旧是3 [6]

    ==>

    function getName (){console.log(4)};//[2]
    function getName () {console.log(4)}; //[4]
    var getName;//[1]
    getName = function () {console.log(3)}; //[1]
    getName();//3[3]
    //var getName = function (){console.log(3)}; //[5] getName已经声明,var getName;被忽略
    getName = function (){console.log(5)};//[5]
    getName() //依旧是3 [6]

    同名的变量名只申明一次,
    变量声明和函数申明都会前提,但是函数申明比变量申明还要提前

    reply
    0
  • ringa_lee

    ringa_lee2017-04-11 12:13:48

    声明提升,函数声明提升优先级高于变量声明,所以你这俩例子都是先走的函数声明,再走的表达式

    reply
    0
  • 阿神

    阿神2017-04-11 12:13:48

    因为function声明的优先级比var声明的优先级高

    reply
    0
  • 怪我咯

    怪我咯2017-04-11 12:13:48

    声明函数会进行提升,函数表达式却不会.

    reply
    0
  • Cancelreply