【发布时间】:2014-07-24 03:53:22
【问题描述】:
这是一个名为test 的命名函数表达式。在内部,我将123 分配给一个变量,也称为test。然后记录test。该函数在控制台中打印它的主体,但不是123。这种行为的原因是什么?
(function test() {
test = 123;
console.log( test );
}());
我对函数执行的解释失败在哪里?
- 函数执行开始:
test是引用函数本身的局部变量 - 局部变量
test被重新分配给编号123 -
console.log(test)显示号码123。
【问题讨论】:
-
我不确定我们是否可以将其视为完全相同的副本。在这种情况下,有一个作业,而不仅仅是链接问题中的
var test;。 -
@dandavis 如果您还在这里,请在对 Kodlee 回答的评论中说“
the name of the function is a "var" to the function...”。以与声明参数相同的方式?如果是这种情况,那么函数名称是否受到某种保护?您可以更改参数的值,认为它们是“预先声明的”。 -
@Teemu:我不确定这个名字在底层是如何工作的。毫无疑问,函数名称有点特别,因为它似乎可以抵抗直接破坏,但我不知道“受保护”;你仍然可以“var test=123;”在函数内部,这是有道理的。 ecmaScript 规范检查可能会解释我们正在经历的现象。
标签: javascript function scope function-declaration function-expression