Javascript 起重功能指令

Javascript 起重功能指令,javascript,Javascript,我有这种情况 var fellowship = undefined; fellowship = function(){ return "broken"; }; function fellowship(){ return "friends"; } console.log(fellowship); 返回“friends”的函数永远无法访问,即使我这样调用它: console.log(fellowship()); function fellowship(){

我有这种情况

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);

有人能解释一下如何调用函数吗?

您的代码被解释为:

console.log(fellowship());
 function fellowship(){
    return "friends";
 }

var fellowship = undefined;

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

console.log(fellowship);
因此,名为“fellowship”的变量的声明将覆盖该符号与使用相同名称定义的函数的绑定。在那之后你不能再叫它了

“有人能解释一下如何调用该函数吗?”

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


函数声明在与同一作用域中的赋值表达式的争用中总是会丢失。

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

var fellowship= function() { return 'friends' };
var fellowship= function() { return 'broken' };
如果您需要有关此的信息,请点击此链接:

是的,在这里,变量提升和功能声明提升的概念正在浮现。 在您的示例中,您已经声明

var fellowship = undefined;
已经在顶端了。 现在是下一个声明:

 fellowship = function() {
        return "broken";
    }
是一个未在javascript中提升的表达式。 第三个是功能声明,在变量提升线上也进行了提升。 所以,现在你的结构变成了:

var fellowship = undefined;

// function declaration hoisted
function fellowship(){
    return "friends";
}

fellowship = function(){
    return "broken";
};
因此,当您调用fellowship()时,它返回“breaked”

这个链接应该对你有用

问题是你为什么会有这种情况?