Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';这就是';名称';返回指定函数的命名JavaScript函数表达式的属性';什么是变量名?_Javascript_Function - Fatal编程技术网

什么';这就是';名称';返回指定函数的命名JavaScript函数表达式的属性';什么是变量名?

什么';这就是';名称';返回指定函数的命名JavaScript函数表达式的属性';什么是变量名?,javascript,function,Javascript,Function,我很好奇为什么命名函数表达式的name属性是函数声明构造名称的值,而不是可用于执行函数的变量 函数functionDeclaration(){ 回来 } var anonymousFunctionExpression=函数(){ 回来 } var namedFunctionExpression=函数functionName(){ 回来 } console.log(functionDeclaration.name)//正如所料,函数名为“functionDeclaration” log(anon

我很好奇为什么命名函数表达式的
name
属性是函数声明构造名称的值,而不是可用于执行函数的变量

函数functionDeclaration(){
回来
}
var anonymousFunctionExpression=函数(){
回来
}
var namedFunctionExpression=函数functionName(){
回来
}
console.log(functionDeclaration.name)//正如所料,函数名为“functionDeclaration”
log(anonymousFunctionExpression.name)//正如所料,函数名为“anonymousFunctionExpression”
log(namedFunctionExpression.name)//为什么函数名是“functionName”而不是“namedFunctionExpression?”
这就是它的工作原理。如果函数表达式中的函数已命名,则将使用该名称(位于
=
右侧)-否则,如果未命名,则
.name
将为您提供创建函数时分配给函数的变量名称。(如果是函数声明而不是函数表达式,则
.name
只是声明函数的名称。)

请注意,如果重新分配以匿名方式创建的函数,其
名称
将保留该函数分配给的原始变量名称。这就是案例2中发生的情况,解释器必须推断变量名:

constfn=()=>{};
常数fn2=fn;
console.log(fn.name);

console.log(fn2.name)因为您显式地命名了函数?在案例1和案例3中,您使用名称声明了一个函数,因此
.name
将指向该函数。案例2是令人惊讶的一个,但我是说。。。一个必须优先于另一个。为什么变量名应该优先于函数的实际名称?请特别注意,引用了规范:赋值操作仅在函数没有
名称
时才更新
名称
属性。因此答案似乎是“因为规范是这么说的”,我想知道定义优先权背后的思维过程。好吧,显式名称优先于推断名称有点道理。
name
属性只是用来帮助调试,而调试是推理存在的唯一原因。