函数名称的值

时间:2015-10-05 05:04:28

标签: javascript javascript-objects

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

var square = function name(x) {

return x*x;

}

当我输入"名称"在控制台上 - 我得到空字符串。

name;
""

当我输入方形时,会按原样打印该功能。 - 足够公平

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

我得到了这个 - square是一个变量,它打印字符串文字

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

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

4 个答案:

答案 0 :(得分:3)

您将获得一个空字符串,因为在全局范围name中引用了窗口对象的name属性,该属性默认为空。

另请注意,分配给name属性的任何值都将转换为字符串。即,如果您指定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>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

评估name时,您实际上正在阅读window.name,默认为空字符串。 这是因为VM查看整个范围链以查找命名变量,并且由于全局上下文==窗口,窗口的所有属性最终都被视为全局变量,并且您在name上获得匹配(与位置相同)等)。

当您命名一个FunctionExpression时,该名称仅在 该函数中可用。

答案 2 :(得分:0)

请参阅以下代码。这就是你要找的东西。

var square = function name(x) {

return x*x;

}

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

答案 3 :(得分:0)

您的功能已在变量中分配,因此您可以通过VARIABLE_NAME.name获取该功能。在您的情况下,它会在您输入square.name时显示。

另一个是square是函数,如果你通过给出圆括号E.g square('myname');来使用它,但是如果你只使用变量名,那么它会打印整个函数。