zoukankan      html  css  js  c++  java
  • function declarations are hoisted and class declarations are not 变量提升

    Classes - JavaScript | MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

    Hoisting

    An important difference between function declarations and class declarations is that function declarations are hoisted and class declarations are not. You first need to declare your class and then access it, otherwise code like the following will throw aReferenceError:

    const p = new Rectangle(); // ReferenceError
    
    class Rectangle {}



    https://developer.mozilla.org/en-US/docs/Glossary/Hoisting

    Hoisting

    Hoisting is a term you will not find used in any normative specification prose prior to ECMAScript® 2015 Language Specification. Hoisting was thought up as a general way of thinking about how execution contexts (specifically the creation and execution phases) work in JavaScript. However, the concept can be a little confusing at first.

    Conceptually, for example, a strict definition of hoisting suggests that variable and function declarations are physically moved to the top of your code, but this is not in fact what happens. Instead, the variable and function declarations are put into memory during the compile phase, but stay exactly where you typed them in your code.

    Learn moreSection

    Technical exampleSection

    One of the advantages of JavaScript putting function declarations into memory before it executes any code segment is that it allows you to use a function before you declare it in your code. For example:

    function catName(name) {
      console.log("My cat's name is " + name);
    }
    
    catName("Tigger");
    
    /*
    The result of the code above is: "My cat's name is Tigger"
    */

    The above code snippet is how you would expect to write the code for it to work. Now, let's see what happens when we call the function before we write it:

    catName("Chloe");
    
    function catName(name) {
      console.log("My cat's name is " + name);
    }
    /*
    The result of the code above is: "My cat's name is Chloe"
    */

    Even though we call the function in our code first, before the function is written, the code still works. This is because of how context execution works in JavaScript.

    Hoisting works well with other data types and variables. The variables can be initialized and used before they are declared.

    Only declarations are hoistedSection

    JavaScript only hoists declarations, not initializations. If a variable is declared and initialized after using it, the value will be undefined. For example:

    console.log(num); // Returns undefined 
    var num;
    num = 6;

    If you declare the variable after it is used, but initialize it beforehand, it will return the value:

    num = 6;
    console.log(num); // returns 6
    var num;

    The below two examples demonstrate the same behavior.

    var x = 1; // Initialize x
    console.log(x + " " + y); // '1 undefined'
    var y = 2; // Initialize y
    
    // The above example is implicitly understood as this: 
    var x; // Declare x
    var y; // Declare y
    // End of the hoisting.
    
    x = 1; // Initialize x
    console.log(x + " " + y); // '1 undefined'
    y = 2; // Initialize y

    Technical referenceSection

    Document Tags and Contributors

     Last updated by: Tymofek, Aug 17, 2018, 2:22:46 PM
     
     
     




  • 相关阅读:
    vue表格多级列表嵌套数据
    HTML5-企业宣传6款免费源码
    HTML5简介及HTML5的发展前景
    30几个HTML5经典动画应用回顾 让你大饱眼福
    2015年必火的五个Html5移动开发工具推荐
    HTML5几种常见的错误写法
    HTML5实现动画三种方式
    简单的圆形图标鼠标hover效果 | CSS3教程
    函数:声明和表达式
    前端工程之模块化
  • 原文地址:https://www.cnblogs.com/rsapaper/p/9596596.html
Copyright © 2011-2022 走看看