JavaScript提升函数与函数变量

时间:2016-02-07 12:19:06

标签: javascript hoisting

这是我的javascript代码:

    console.log(a);
    c();
    b();            
    var a = 'Hello World';
    var b = function(){
        console.log("B is called");
    }
    function c(){
        console.log("C is called");
    }

现在输出:

undefined
hoisting.html:12 C is called
hoisting.html:6 Uncaught TypeError: b is not a function

我的问题是关于为什么c()和b()表现不同。并且b应该抛出类似b未定义的错误。

4 个答案:

答案 0 :(得分:2)

功能声明将与其正文一起悬挂。

不是函数表达式,只会挂起var语句。

这就是你的代码在编译时之后“看起来”对解释器的看法 - 在运行时之前:

query.bindValue(":include_trial", include_trial ? QVariant(include_trial) : QVariant());

KISSJavaScript

答案 1 :(得分:1)

功能表达

  var b = function(){
        console.log("B is called");
    }

功能声明

function c(){
    console.log("C is called");
}

功能表达式仅在解释器到达该行代码时加载。另一方面,函数声明,它始终有效。因为在加载所有声明之前不能调用任何代码。

详细了解Function DeclarationFunction Expression

答案 2 :(得分:0)

当您致电 b 时尚未定义。您的 b 是一个包含功能的变量,而您访问 b 的时间尚未定义。

答案 3 :(得分:0)

因为使用Function Expression声明一个函数会创建一个匿名函数,除非您明确提供了一个名称:

var b = function() {}   // anonymous function 

并且使用“函数声明”声明函数时,设置名称为

function c() {}   // c function