使用功能顺序吊装

Hoisting with Functions order

本文关键字:顺序 功能      更新时间:2023-09-26

我有这种情况

var fellowship = undefined;
fellowship = function(){
    return "broken";
  };
 function fellowship(){
    return "friends";
 }
console.log(fellowship);

返回"friends"的函数永远不会到达,即使我这样称呼它:

console.log(fellowship());

谁能解释一下如何调用该函数?

您的代码被解释为如下所示:

 function fellowship(){
    return "friends";
 }
var fellowship = undefined;
fellowship = function(){
    return "broken";
  };
console.log(fellowship);

因此,名为"fellowship"的变量的声明会覆盖该符号与用相同名称定义的函数的绑定。在那之后你不能打电话。

"谁能解释一下如何调用这个函数?"

它不能被调用。您已经覆盖了它。单个标识符无法直接引用两个不同的值。

函数声明将始终在与同一范围内的赋值表达式争用中丢失。

是的,在这里,可变吊装和功能声明吊装的概念正在出现。在您的示例中,您已声明

var fellowship = undefined;

已经在顶部。现在下一条语句:

 fellowship = function() {
        return "broken";
    }

是一个在 JavaScript 中没有提升的表达式。第三个是功能声明,在可变吊装线上也被吊装。所以,现在你的结构变成这样:

var fellowship = undefined;
// function declaration hoisted
function fellowship(){
    return "friends";
}
fellowship = function(){
    return "broken";
};

因此,当您调用 fellowship() 时,它返回 'broken'。

http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/这个链接应该对你有用

在 JavaScript 中,函数定义被提升到当前范围的顶部。因此,您的示例代码如下所示:

var fellowship= function() { return 'friends' };
var fellowship= function() { return 'broken' };

如果您需要有关此内容的信息,请点击此链接:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html