首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript提升函数与函数变量

JavaScript提升函数与函数变量
EN

Stack Overflow用户
提问于 2016-02-07 12:19:05
回答 4查看 385关注 0票数 2

以下是我的javascript代码:

代码语言: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");
    }

下面是输出:

代码语言:javascript
复制
undefined
hoisting.html:12 C is called
hoisting.html:6 Uncaught TypeError: b is not a function

我的问题是为什么c()和b()的行为不同。而b应该抛出错误,类似于b是没有定义的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-07 12:33:06

“功能宣言”将与其身体一起悬挂。

函数表达式不是,只有var语句才会被吊起。

在编译时之后--运行时之前--您的代码在解释器中的“外观”就是这样的:

代码语言:javascript
复制
 var c = function c(){
      console.log("C is called");
 }

 var a = undefined
 var b = undefined

 console.log(a); // undefined at this point
 c(); // can be called since it has been hoisted completely
 b(); // undefined at this point (error)

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

KISSJavaScript

票数 2
EN

Stack Overflow用户

发布于 2016-02-07 12:24:51

函数表达式

代码语言:javascript
复制
  var b = function(){
        console.log("B is called");
    }

函数声明

代码语言:javascript
复制
function c(){
    console.log("C is called");
}

函数表达式只有在解释器到达code.On的另一边--函数声明--时才会加载,它总是可以工作的。因为在加载所有声明之前,不能调用任何代码。

阅读更多关于功能声明函数表达式的信息

票数 1
EN

Stack Overflow用户

发布于 2016-02-07 12:26:57

在您调用b时,还没有定义。您的b是一个包含函数的变量,访问b的时间尚未定义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35253376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档