美文网首页
Javascript 中函数声明的本质

Javascript 中函数声明的本质

作者: 奋斗_d30d | 来源:发表于2019-07-08 11:29 被阅读0次

    Javascript是一门解释后运行的语言,要弄清楚函数声明的本质,就要知道函数声明会被怎么解释成什么样的语句来执行的。

    分两种情况。

            1.在{}内单独声明函数,这种语句会解释成将函数赋值给与它的同名变量的语句,并将该条语句上移至它的父语句{}的最顶端。(注:{}符号可以属于函数的也可以属于表达式的,不轮那种都以{}符号为准)

            2.表达式(非{}表达式)中的声明函数(如(function fun(){...});var a=function fun(){...}; true?function fun(){...}; return function fun(){...}等等),不进行任何解析,位置也不变。

    例1.

    函数声明 函数声明解释后 变量声明提升后

    如上:

    function subFun(){}是在{}内单独声明的函数,解释后var subFun=function subFun(){}并将它提升到父语句{}之后。(变量名提升后,与函数解析无关,只是为了方便理解)

    例2.

    函数声明 函数声明解释后 变量声明提升后

    如上:

    function subFun(){}是{}内单独声明的函数,解释后var subFun=function subFun(){}并将它提升到父语句{}之后。(变量名提升后,与函数解析无关,只是为了方便理解)

    例3.

    赋值语句,函数声明不进行解释 变量声明提升后

    如上:

            var sub=function subFun(){};表达式,所以它中的函数声明不会进行解释。由于变量声明提升的特性,会将var sub声明部分提升到函数作用域的顶部。

    例4.

    立即执行语句,不执行解释

    如上:立即执行函数中function sumFun(){ console.log('a')}在表达式()内,所以不进行任何解释。

    例5.

    不进行任何解释

    如上:函数function sumFun(){...}是在?:表达式内所以不进行任何解释。

    例6.

    报错无法解释

    如上:根据逻辑var q={function sumFun(){console.log('a')}},但var q={...}这种赋值形式在js中是不存在的(JSX虚拟DOM语言就用这种方式赋值,利用JS没有的东西发明的一种语法。),是会报错的。因此会报错。

    假设上面可以解释,function sumFun(){...}在{}内,所以会解析成var sumFun = function sumFun(){...},最后成为下面这样

    虚拟解析后

    以上就是函数声明解释的所有内容,是不是很简单。

    相关文章

      网友评论

          本文标题:Javascript 中函数声明的本质

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