函数名的值

Value of the function name

考虑以下函数定义表达式 (FDE):

var square = function name(x) {

return x*x;

}

当我在控制台上键入 "name" - 我得到空字符串。

name;
""

当我键入 square 时,它按原样打印函数。 - 很公平

   square;
   function name(){ console.log('hi');}

我明白了 - square 是一个变量,它打印字符串文字

但是 "name" 呢? - 名称仅在函数体内有效,因为它是函数定义表达式的一部分。

"name" 控制台上的值是空白 - 这是为什么?由于它是 FDE 的一部分,引擎会忽略函数代码块之外的任何引用吗?这是正确的解释吗?

当您评估 name 时,您实际上是在读取 window.name,它默认为空字符串。 这是因为 VM 遍历整个范围链来查找命名变量,并且由于全局上下文 == window,window 的所有属性最终都被视为全局变量,并且您在 name(与位置等相同)。

命名 FunctionExpression 时,该名称仅在 该函数内可用。

您得到一个空字符串,因为在全局范围内 name 指的是默认为空的 window 对象的名称 属性。

另请注意,分配给 name 属性 的任何值都将转换为字符串。即,如果您分配 name= {},则分配给名称的值将是 "[object Object]",因为它是对象的字符串表示形式。

当您在函数表达式中使用函数名时,函数名将仅在函数内部可用。

var fn = function testme() {
  snippet.log('inside typeof: ' + typeof testme)
  snippet.log('inside value: ' + testme)
  return 'some value'
}

fn();
snippet.log('--')
snippet.log('outside typeof: ' + typeof testme)
snippet.log('outside value(fn): ' + fn)
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

看下面的代码。这就是您要找的。

var square = function name(x) {

return x*x;

}

document.getElementById('thename').innerHTML = square.name;
<div id='thename'></div>

您的函数已分配到变量中,因此您可以通过 VARIABLE_NAME.name 获取它。在您的情况下,它会在您输入 square.name.

时显示

另一件事是 square 是函数,如果你通过给圆括号使用它,它就会执行,例如 square('myname'); 但如果你只使用变量名,那么它会打印整个函数。