Javascript函数返回全局分配给自己,然后分配给其他东西

时间:2015-03-12 02:50:28

标签: javascript

var bar = function foo() {
  foo = 1;
  return foo;
};
bar(); // returns function foo()

为什么会这样?我希望这会返回1.

3 个答案:

答案 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

修改 这是你的问题的答案。命名函数表达式的名称将成为局部变量,并且只能在函数表达式中访问。函数名称和赋值函数的变量之间存在区别。 无法更改函数名称,而可以重新分配函数所分配的变量。

Read more on MDN

答案 2 :(得分:2)

这是一个描述相同行为的类似问题......

Function and variable with the same name

一篇描述正在发生的事情的链接文章......

http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting