Javascript 如果var a=函数b(){}
所以我在阅读javascript函数时发现有两种编写函数的方法,第一种是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()
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:谢谢你指出这一点,否则我可能会也可能不会想澄清它。:-)