suchen

Heim  >  Fragen und Antworten  >  Hauptteil

var- und function-Schlüsselwörter

var a = 1;

1

2

3

4

5

<code>function a()

{

    console.log(a);

};

a();</code>

Diese JS-Codezeilen melden beim Ausführen einen Fehler, aber was ist der Grund? Bitten Sie Gott um eine Erklärung

仅有的幸福仅有的幸福2863 Tage vor579

Antworte allen(5)Ich werde antworten

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-19 10:31:08

    函数做为javascript的第一公民,所以在此处存在函数提升。上述代码最后的实现和以下效果是一样的

    1

    2

    3

    4

    5

    6

    7

    <code>function a()

    {

        console.log(a);

    };

    var a = 1;

    a();

    </code>

    这样会导致原有的函数名被覆盖。

    Antwort
    0
  • PHP中文网

    PHP中文网2017-05-19 10:31:08

    标识符重复了啊 你已经给a声明成一个变量了

    Antwort
    0
  • 高洛峰

    高洛峰2017-05-19 10:31:08

    首先说一点 js 看到 var a = 1 是 分两步来解析,第一 把var a 提升到当前作用域顶端,然后依次往下解析,知道a = 1 开始赋值

    这就是 变量 跟 函数重名的问题, 简单来说 js引擎解析顺序是这样的
    1.变量个函数声明提升到当前作用域顶端 → var a ↑ 和 `function a()
    {

    1

    <code>console.log(a);</code>

    }`
    2.然后解析剩下的代码 `a=1;
    a()`,

    Antwort
    0
  • 怪我咯

    怪我咯2017-05-19 10:31:08

    这是因为函数声明会提前

    1

    2

    3

    4

    5

    6

    <code>var a = 1;

    function a()

    {

        console.log(a);

    };

    a();</code>

    1)函数声明会置顶
    2)变量声明也会置顶
    3)函数声明比变量声明更置顶:(函数在变量上面)
    4)变量和赋值语句一起书写,在js引擎解析时,会将其拆成声明和赋值2部分,声明置顶,赋值保留在原来位置
    5)声明过的变量不会重复声明

    就会相当于下面的这个样子

    1

    2

    3

    4

    5

    6

    7

    <code>var a = function ()

    {

        console.log(a);

    };

    var a = 1;

     

    a();</code>

    希望帮到你~

    Antwort
    0
  • 漂亮男人

    漂亮男人2017-05-19 10:31:08

    很多人都提到了是变量提升的问题,但解释的不太对。var提升是拆开来提升的,函数是整个提升的。FYI

    所以应该是这个样子:

    1

    2

    3

    4

    5

    6

    7

    <code>var a;

    function a ()

    {

        console.log(a);

    };

    a = 1;

    a();</code>

    Antwort
    0
  • StornierenAntwort