为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在用JavaScript定义函数之前我可以使用它?

为什么在用JavaScript定义函数之前我可以使用它?

杨魅力 2019-10-16 13:09:03
为什么在用JavaScript定义函数之前我可以使用它?即使在不同的浏览器中,此代码也总是工作的:function fooCheck() {   alert(internalFoo()); // We are using internalFoo() here...   return internalFoo(); // And here, even though it has not been defined...   function internalFoo() { return true; } //...until here!}fooCheck();不过,我找不到一条理由来说明它为什么要起作用。我第一次看到这一点是在JohnResig的演示文稿中,但只提到了这一点。那里和任何地方都无法解释这件事。有人能告诉我吗?
查看完整描述

3 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

这个function声明是神奇的,在执行代码块*中的任何内容之前,都会对其标识符进行绑定。

这与带有function表达式,该表达式按正常的自顶向下顺序计算.

如果您将示例更改为:

var internalFoo = function() { return true; };

就会停止工作。

函数声明在语法上与函数表达式是完全不同的,尽管它们看起来几乎相同,在某些情况下也可能是模棱两可的。

这在ECMAScript标准、分段10.1.3..不幸的是,ECMA-262并不是一个可读性很强的文档,即使按照标准-标准!

*:包含函数、块、模块或脚本。



查看完整回答
反对 回复 2019-10-17
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

它被称为提升-调用(调用)在定义函数之前的一个函数。

我想写的两种不同类型的函数是:

表达式函数&减速函数

  1. 表达功能:

    函数表达式可以存储在变量中,因此它们不需要函数名。它们还将命名为匿名函数(一个没有名称的函数)。

    要调用(调用)它们总是需要使用变量名..如果在定义调用之前调用,这些函数将无法工作,这意味着此处不会发生提升。我们总是必须先定义表达式函数,然后调用它。

    let lastName = function (family) {
     console.log("My last name is " + family);};let x = lastName("Lopez");

    这就是如何用ECMAScript 6编写:

    lastName = (family) => console.log("My last name is " + family);x = lastName("Lopez");
  2. 减速功能:

    函数使用以下语法声明,但不会立即执行。它们“保存以供以后使用”,并将在调用(调用)时执行。如果在定义函数之前或之后调用它们,则这些类型的函数可以工作。如果在定义减速函数之前调用它-提升-正常工作。

    function Name(name) {
      console.log("My cat's name is " + name);}Name("Chloe");

    吊装实例:

    Name("Chloe");function Name(name) {
       console.log("My cat's name is " + name);}



查看完整回答
反对 回复 2019-10-17
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

浏览器从头到尾读取HTML,并在读取并解析为可执行块(变量声明、函数定义等)时执行它。但在任何时候都只能使用脚本中定义的内容。

这与处理(编译)所有源代码的其他编程上下文不同,可能会将其与解析引用所需的任何库连接在一起,并构造一个可执行模块,在该模块开始执行。

您的代码可以引用命名对象(变量、其他函数等)。这是进一步定义的,但是在所有片段可用之前,您不能执行引用代码。

随着您熟悉JavaScript,您将密切注意到您需要按照适当的顺序编写东西。

修订:要确认接受的答案(上面),使用Firebug步骤通过一个网页的脚本部分。在实际执行任何代码之前,您将看到它从一个函数跳到另一个函数,只访问第一行。



查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 304 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信