javascript闭包的混乱
事实证明,我并不真正理解javascript闭包,下面的代码让我感到困惑。我以为fxn会访问外部foo,但它实际上打印出了“欠罚款”。为什么javascript闭包的混乱,javascript,closures,Javascript,Closures,事实证明,我并不真正理解javascript闭包,下面的代码让我感到困惑。我以为fxn会访问外部foo,但它实际上打印出了“欠罚款”。为什么 这是因为在JavaScript中,变量获取 变量在创建时初始化为未定义。带有 初始化器在以下情况下被分配其AssignmentExpression的值: VariableStatement是执行的,而不是在创建变量时执行的 因此,在语义上,您的代码将等价于以下内容 var foo = "hello"; function fxn(){ var foo;
这是因为在JavaScript中,变量获取 变量在创建时初始化为未定义。带有 初始化器在以下情况下被分配其AssignmentExpression的值: VariableStatement是执行的,而不是在创建变量时执行的 因此,在语义上,您的代码将等价于以下内容
var foo = "hello";
function fxn(){
var foo; //Variables are initialised to undefined when created
alert(foo);
foo = "test"; //A variable with an *Initialiser* is assigned the value of its *AssignmentExpression* when the *VariableStatement* is **executed**
}
fxn();
在函数外部定义变量
foo
。如果重复调用var
,则会在函数内重新定义变量,并且该变量将丢失其分配
删除函数中的var
,以访问函数fnx
中的foo
var foo = "hello";
function fxn(){
alert(foo);
foo = "test";
}
fxn();
无法复制。它将记录未定义的日志,但警告
hello
您能再解释一下吗?您在函数之外定义了变量“foo”。如果您重复调用“var”,您将在函数内部重新定义变量,它将丢失其分配。。。2) 在定义变量之前,您正在使用它=>'undefined'(另请参见C5H8NNaO4答案)@Hezi For mefoo
是本例中的全局变量()。因此,变量被定义,并在alert()之后更新。@R3tep正确。但在最初的问题中,变量是使用“var”重新定义的。
var foo = "hello";
function fxn(){
alert(foo);
foo = "test";
}
fxn();