Javascript 如果var a=函数b(){}

Javascript 如果var a=函数b(){},javascript,Javascript,所以我在阅读javascript函数时发现有两种编写函数的方法,第一种是 function b(){console.log("name")} 如果我写b,它的名字就是b 第二种方法是使用 var a = function() {console.log("name")} 如果我写一个名字,它会给出一个 所以我的问题是当我们写这样一个函数时会发生什么 var a =function b(){console.log("name")} 在这种情况下,如果我调用a() 它会很好用的 如果我调用b()

所以我在阅读javascript函数时发现有两种编写函数的方法,第一种是

function b(){console.log("name")}
如果我写b,它的名字就是b

第二种方法是使用

var a = function() {console.log("name")}
如果我写一个名字,它会给出一个

所以我的问题是当我们写这样一个函数时会发生什么

var a =function b(){console.log("name")}
在这种情况下,如果我调用
a()
它会很好用的
如果我调用
b()它显示了一个错误
但是如果我写a.name,它会显示b。有人能帮我理解吗?

var a =function b(){console.log("name")}
…因为您在函数表达式中指定了一个名称,该名称将成为函数的名称(例如,
a.name
将返回
“b”
[当然,由于
a
b
引用相同的函数,
b
也将返回
。)。当函数表达式未赋值时,仅从赋值表达式推断名称(如果可能)

(请注意,为使用匿名函数表达式创建的函数推断函数名相对较新,这是ES2015中添加的一项功能。还请注意,在此之前,函数的
name
属性也没有正式添加。)

以下是所有演示的内容:

函数b1(){
console.log(“[inside]b1.name=“+b1.name”);
}
console.log(“b1.name=“+b1.name”);
b1();
var a1=函数(){
console.log(“[inside]a1.name=“+a1.name”);
};
console.log(“a1.name=“+a1.name”);
a1();
var a2=函数b2(){
console.log(“[inside]b2.name=“+b2.name”);
};
console.log(“a2.name=“+a2.name”);

a2()
如果您检查函数的名称(键入
a.name
),您将收到
“b”

显然,
函数
关键字后的标识符是函数名,赋值前的标识符是对函数的引用


如果未指定赋值(即,您的第一个示例-
函数b(){}
没有
var a=
),则名称本身将是引用(对象
b
将具有对函数的引用)。

@YotamSalmon:这取决于您在哪里编写它。例如,如果您在函数中编写它,它将为您提供
“b”
。我会澄清的。谢谢你的澄清(我与OP测试
a
b
表达式的方式相同)@Yotammarlon:谢谢你指出这一点,否则我可能会也可能不会想澄清它。:-)