Javascript 将命名函数存储在具有不同名称的变量中

Javascript 将命名函数存储在具有不同名称的变量中,javascript,function,variables,Javascript,Function,Variables,考虑这段代码: var x = function z(){ console.log("called x"); } x(); // will print out "called x" z(); // ReferenceError! 因此,可以将命名函数存储在变量中,但我们仍然只能通过变量名调用函数 这种行为有什么原因吗?为什么我们可以在变量中存储命名函数?还有其他可能有用的场景吗?当您使用这样的命名函数表达式(NFE)时,函数的名称仅在函数的范围内: var x=函数z(){ con

考虑这段代码:

var x = function z(){
    console.log("called x");
}

x(); // will print out "called x"
z(); // ReferenceError!
因此,可以将命名函数存储在变量中,但我们仍然只能通过变量名调用函数


这种行为有什么原因吗?为什么我们可以在变量中存储命名函数?还有其他可能有用的场景吗?

当您使用这样的命名函数表达式(NFE)时,函数的名称仅在函数的范围内:

var x=函数z(){
console.log(typeof z);/“函数”
};
x();

console.log(类型z);//“未定义”
只需将函数
z
分配给变量
x
,如下所示:

函数z(){
console.log(“称为x”);
}
var x=z;
x();//将打印出“称为x”

z();//将打印出“called x”
您可以执行以下操作:
var z=function(){…};var x=z。然后你可以调用
x()
z()
。嗨,我问这个问题的目的不是想知道如何调用z(),而是想了解javascript中这种特殊行为的原因@系统发育学“像这样尝试”为什么?你改变了什么?你为什么要改变它?这种变化有什么影响?代码转储不是有用的答案。您好,我不是想找出如何使对z()的调用工作,而是想了解javascript中这种特殊行为的原因。我注意到z将在函数范围内可用。但是,x不也在范围内可用吗?给要存储在变量中的函数命名有什么好处吗?@Jackyef:如果变量发生变化,或者根本没有将结果赋给变量(例如,将递归函数作为回调传递给另一个函数),诸如此类的事情。