var bar = function foo() {
foo = 1;
return foo;
};
bar(); // returns function foo()
为什么会这样?我希望这会返回1.
答案 0 :(得分:3)
如果你想让它返回1,你需要这样写:
var bar = function() {
foo = 1;
return foo;
};
LVarayut's answer实际上是正确的,你正在写在全局命名空间中的foo。这个版本声明了一个局部变量foo。
var bar = function() {
var foo = 1;
return foo;
};
答案 1 :(得分:2)
这是因为你已经定义了两次foo变量,所以如果你想返回1,你可以将你的函数名改为其他任何东西:
var bar = function baz() {
foo = 1;
return foo;
};
bar(); // returns 1
或者你可以定义一个局部变量:
var bar = function foo() {
var foo = 1;
return foo;
};
bar(); // returns 1
修改强> 这是你的问题的答案。命名函数表达式的名称将成为局部变量,并且只能在函数表达式中访问。函数名称和赋值函数的变量之间存在区别。 无法更改函数名称,而可以重新分配函数所分配的变量。
答案 2 :(得分:2)
这是一个描述相同行为的类似问题......
Function and variable with the same name
一篇描述正在发生的事情的链接文章......
http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting