美文网首页🐋成员文章
JavaScript中函数声明提升

JavaScript中函数声明提升

作者: 干煸小黄鱼儿 | 来源:发表于2017-03-21 14:06 被阅读62次
    a(); // => a
    console.log(b); // => undefined
    function a() {
        console.log('a');
    }
    var b = 'b';
    c(); // => Uncaught TypeError: c is not a function
    if (true) {
        function c() {
            console.log('c');
        }
    }

运行结果:(chrome 54.0+、IE11)

a
undefined
Uncaught TypeError: c is not a function

js中变量声明和函数声明会在解析的时候提升【参考MDN变量提升】。但是为什么if(true)...语句后边的函数没有被提前呢?这和很多其他的博客中描述的完全不一样。依据其他博主的博客中描述输出的结果应该是:

a
undefined
c

函数声明提升的解释

在MDN中对于函数的描述

MDN上对于函数声明提升的例子
即,通过函数声明定义的函数,在解析时会被提升;而通过函数表达式定义的函数不会被解析,只会在运行时解析(执行到此处)。

MDN中有提到原因:函数表达式定义的函数继承了当前的作用域。换言之,函数构成了闭包。

对于函数声明和函数表达式的区别:


函数声明和函数表达式区别

由此,上边代码的if(true)...中函数部分因为属于函数表达式定义的函数,所以在开始解析的时候并不会被提升到外部作用域,所以c()得到的结果是错误Uncaught TypeError: c is not a function

顶部代码在经过解析之后的顺序是:

    function a() {
        console.log('a');
    }
    var b;
    a();
    console.log(b);
    b = 'b';
    c();
    if (true) {
        function c() {
            console.log('c');
        }
    }

欢迎斧正

相关文章

  • 变量提升 & this指向

    变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量可以在...

  • var与let、const的区别

    什么是变量提升?JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量...

  • JavaScript 变量提升

    JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量可以在使用后声明...

  • JavaScript 变量提升

    JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。JavaScript 中,变量可以在使用后声明...

  • 作用域

    变量声明提升 在 JavaScript 中,函数声明(function aa(){})与变量声明(var)经常被 ...

  • JavaScript中函数声明提升

    运行结果:(chrome 54.0+、IE11) js中变量声明和函数声明会在解析的时候提升【参考MDN变量提升】...

  • js 基础

    JavaScript 函数 是对象 函数提升 提升作用域 在声明前调用。 自调用 (不能自调用声明的函数) 表达...

  • js函数

    函数声明和函数表达式有什么区别 函数声明: 函数表达式: JavaScript 解释器中存在一种变量声明被提升的机...

  • javascript声明函数提升

    煮个栗子: function a (x) {return x * 2;}var a;alert (a); 这里有一...

  • 详解变量提升和函数声明提升

    JavaScript的执行步骤 要讨论JavaScript中的变量提升和函数声明提升,我们首先要知道的是,当浏览器...

网友评论

    本文标题:JavaScript中函数声明提升

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