【问题标题】:Typeof for javascript functionjavascript函数的typeof
【发布时间】:2015-07-28 20:46:23
【问题描述】:

当我这样声明一个函数时:

function x() { return 123 };

然后:

typeof x; //return "function"
typeof x(); //return "number"

没关系,但是一旦我创建了这样的变量:

var y = function x() { return 123 };

变成:

typeof y; //return "function"
typeof y(); //return "number"
typeof x; //return "undefined"
typeof x(); //return error

为什么 x 失去了他的功能?请帮助p

【问题讨论】:

  • 我得到了不同的结果..在 chrome 和 mozilla 中尝试过..
  • @RayonDabre 我没有,我两个都试过了。你到底尝试了什么?
  • 参见kangax.github.io/nfe --- 在标题“命名函数表达式”下,确实提到了这一点(该部分的结尾):“要记住的一个重要细节是,这个名称仅在新定义的函数范围内可用;规范要求标识符不应该对封闭范围可用:"
  • @Pius,检查this
  • @RayonDabre 那完全不同。你想展示什么?当然你的“x()”是定义的——你在顶部这样做!请参阅我的评论和上面的链接。

标签: javascript function variables typeof


【解决方案1】:

为什么 x 失去了他的功能?

函数声明在当前范围内创建一个同名变量。

命名函数表达式不会(某些旧版本的 Internet Explorer 除外,这是一个错误)。

这就是函数表达式应该如何工作的。

【讨论】:

  • 我通常说«function x(){}»只是«var x = function x(){}»的简写。第一个“x”是变量名,它是在声明时保存函数的变量名。第二个“x”是函数的实际名称,尽管使用了变量或方法来调用它,但您将在错误跟踪和调试数据中看到它。 …此外,函数名称可用于在函数内部(递归地)调用自身,而无需关心初始保持变量是否被删除或重用。
  • 我通常说 «function x(){}» 只是 «var x = function x(){}» 的简写。 — 嗯,它不是吨。除了您已经列出的所有其他差异之外,函数声明被提升,而函数表达式则没有。
  • @bitifet 是否意味着我使用任何名称来声明函数,如果我将其声明为另一个名称的变量,它将失去其功能?并且函数本身将属于新变量
  • 是的。我试图清楚地解释为什么有这两种形式并且做错了。实际上并不是“唯一”...
  • @Pius — 不。将函数分配给变量不会删除对它的所有其他引用。只是使用函数表达式创建函数不会在当前作用域创建同名变量。
猜你喜欢
  • 2012-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多