zoukankan      html  css  js  c++  java
  • es6基本用法

    let 命令

    let 基本用法:ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。

    var 的“语法提升”示例1:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <script>
            console.log(a)
            {
                var a = 1;
            }
            console.log(a)
            // 运行结果:
            // undefined
            // 1
    
            // 运行结果分析: 一个{}就是一个语法块,但 var 具有“语法提升”的作用:即 在{}中运行到 var 处,会把该变量先提到外面去声明,让该变量
            // 成为全局变量。(而且 var 能够重复声明变量)所以上述代码等价于以下代码:
            /*
            var a
            console.log(a)
            {
                a = 1
            }
            console.log(a)
            */
        </script>
    </body>
    </html>

    同理, 下面的代码如果使用var,最后输出的是10

    var a = [];
    for (var i = 0; i < 10; i++) {
      a[i] = function () {
        console.log(i);
      };
    }
    a[6](); // 10

    如果使用let,声明的变量仅在块级作用域内有效,最后输出的是 6。

    var a = [];
    for (let i = 0; i < 10; i++) {
        a[i] = function () {
        console.log(i);
        };
    }
    a[6](); // 6

    let 变量的特点:

    {
        // let a: 1. 局部作用域; 2. 不会存在变量提升; 3. let 的变量不能重复声明
        let a = 3;
    }

    所以如果在上述示例的代码块的外部调用变量a,如 console.log(a), 则会报错

    const 命令

    基本用法:const声明一个只读的常量。一旦声明,常量的值就不能改变。 

    而且 const 也跟 let 一样:

    • 局部作用域;
    • 不会存在变量提升;
    • 不能重复声明

    参考链接:https://es6.ruanyifeng.com/#docs/let

    模板字符串

    反引号(``)中可以通过 ${变量名} 来插入值

    let name = '未来';
    let s = `${name}已来`
    console.log(s)    // 未来已来

    箭头函数:

    let add = (x)=>{
        return x + 1
    }
    console.log(add(7))    // 8

    对象:

    ES5 中的对象:

    var person = {
        name: "NEO",
        fav: function(){
            console.log(this);  // this 指向了当前对象
            console.log(this.name)  
        }
    }
    person.fav()
    
    /*
    {name: "NEO", fav: ƒ}
    NEO
    */

    ES6对象中的剪头函数:

    let person = {
        name: "NEO",
        fav: () => {
            console.log(this);  // 对象的剪头函数中, this 的指向发生了改变;this 指向定义persion的父级对象(上下文),此例中即 windows
            console.log(this.name)  //
        }
    }
    person.fav()
    
    /*
    Window {window: Window, self: Window, document: document, name: "", location: Location, …}
    
    */

    ES6对象中的单体模式:

    let person = {
        name: "NEO",
        fav(){  // 这种写法完全等价于下面的示例
            console.log(this);  // this 指向当前对象
            console.log(this.name);
        }
    
        /*
        fav: function(){
            ...
        }
        */
    }
    person.fav()
    
    /*
    {name: "NEO", fav: ƒ}
    NEO
    */

    类:

    ES5中的类:

    function Person(name, age) {
        this.name = name
        this.age = age
    }
    
    // 基于 原型(prototype)给对象声明方法
    Person.prototype.showName = function(){   // 基于 prototype 给类Person声明的方法,那么 Person 类所有的子类都会有这个方法
        console.log(this.name)  // this 指向当前对象
    }
    
    var p = new Person('neo', 30);
    p.showName()
    
    /*
    neo
    */

    ES6中的类:

    class Vue{
        constructor(name, age=30){  // 类的构造函数
            this.name = name;
            this.age = age;
        }
    
        // 写法类似于 单体模式
        showName(){
            console.log(this.name)
        }
    }
    
    let V = new Vue('Neo');
    V.showName()    // Neo

    ES6 链接: 

    https://es6.ruanyifeng.com/

  • 相关阅读:
    python Flask JQuery使用说明
    sqlserve 数据类型具体解释
    赵雅智_ListView_SimpleAdapter
    HDU 1018 Big Number (log函数求数的位数)
    cocos2d函数
    BZOJ 3514 Codechef MARCH14 GERALD07加强版 Link-Cut-Tree+划分树
    QQ好友列表数据模型封装
    【Codeforces】512C Fox and Dinner
    spring中操作mysql数据库
    【读书笔记】iOS-Xcode-模拟器操作的一些快捷键
  • 原文地址:https://www.cnblogs.com/neozheng/p/14257181.html
Copyright © 2011-2022 走看看