函数名的值
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');
但如果你只使用变量名,那么它会打印整个函数。
考虑以下函数定义表达式 (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');
但如果你只使用变量名,那么它会打印整个函数。