美文网首页
function foo(){}与var foo =functi

function foo(){}与var foo =functi

作者: __马帅傅__ | 来源:发表于2017-09-16 12:31 被阅读0次

    function foo(){} 在进入函数执行上下文开始执行代码的时候,foo已经是一个function了。

    var foo =  function(){}中,foo在进入函数执行上下文开始执行代码的时候,foo是undefined,直到执行完var foo =  function(){}这句,foo才会得到赋值。

    最关键的区别在于JavaScript函数与变量的“提前”行为。

    声明提升:

    变量的声明提升:把变量的声明提升到当前作用域的最前面;

    函数的声明提升:把函数的声明提升到当前作用域的最前面,位于前置的变量声明后面。

    JS解析器:

    1.找一些东西: var ,function,参数

    2.逐行解读代码:

    表达式: = + - * / % ++ -- ! 参数 ……(表达式可以修改解析的值)。

    function hereOrThere(){ return 'here'; }

    alert(hereOrThere()); // 'There'

    function hereOrThere(){ return 'there'; }

    由于函数的声明提升,以上代码编译后相当于:

    function hereOrThere(){ return 'here'; }

    function hereOrThere(){ return 'there'; }   

    alert(hereOrThere()); // 'There'


    声明前置了,但因为这里的声明和赋值在一起,所以一起前置,如下所示:

    var hereOrThere = function(){ return 'here'; } 

    alert(hereOrThere()); // 'here'

    hereOrThere = function(){ return 'there'; }

    以上代码编译后相当于:

    var hereOrThere;  //声明前置了

    hereOrThere = function(){ return 'here'; }

    alert(hereOrThere()); // 'here'

    hereOrThere = function(){ return 'there'; }

    相关文章

      网友评论

          本文标题:function foo(){}与var foo =functi

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