ES6入门

1

先去nodejs官网下载nodejs:https://nodejs.org/zh-cn/download/

安装完nodejs之后

安装git

安装完Git后,应该在Git Bash里执行如下语句:

git clone https://www.github.com/cucygh/es6-webpack.git

克隆完后 cd es6-webpack

执行:npm install

等待安装完成

执行:npm start

 

2:ES6常量

 使用bash 创建文件 touch src/const.js

 Object.defineProperty(window,"PI2",{

   value:3.1415926,

   writable: false, //ES5写法 不可写,只能读

})

console.log(window.PI2);

//ES6

const PI = 3.1415926;

PI = 5;

console.log(PI);

 

3:作用域

// ES6 作用域

var callbacks = [];

for(var i =0 ;i<=2 ;i++)

{

        callbacks[i] = function() {

                 return i*2;

        }

}

console.table([

     callbacks[0](),

     callbacks[1](),

     callbacks[2](), //所有的值都是6  闭包

        ])

闭包复习:

闭包:是指有权访问另一个函数作用域中变量的函数.

var callbacks2 = [];

for(let j =0 ;j<=2 ;j++)

{

        callbacks[j] = function() {

                 return j*2;

        }

}

console.table([

     callbacks[0](), //0,2 ,4

     callbacks[1](),

     callbacks[2](),

        ])

使用let声明的变量块作用域,每循环一次相当于重新生成一个块作用域。

我们在ES5中为了使用块作用域一般使用匿名函数

;(function(){

 

   const foo = function(){

     return 1;

   }

   console.log("foo ===1",foo() === 1)

//匿名函数是作用域隔离所以不会报错

   ;(function(){

 

     const foo = function(){

     return 2;

   }

   console.log("foo ===2",foo() === 2)

 

   })()

 

})()//作用域

 

//ES6作用域

//ES6 使用作用域

{

   const name="name";

   console.log(name);

   {

     const name = "diaomaoshou";

     console.log(name);

   }

}

 

4:箭头函数

ES5中函数声明 function(){}  =>ES6 ()=>{} ;//箭头函数 ()当只有一个参数的时候可以不写,

{}//当里面直接返回的时候{}括号也可以不写

ES6 使用map遍历 let adds = events.map(v => v+1)

ES5 var  adds = events.map(function(v){return v+1;})

 

普通函数this->调用次函数的对象,箭头函数this->arguments()里面的参数,箭头函数this->定义的时候函数的指向;

  {

       function factory(){

         this.a = "a";

         this.b = "b";

         this.c = {

          a:"a++",

          b:"b++",

          c:()=>{

             return this.a;

       }  

 }

 } console.log(new factory().c.c());//this->a;

 }

5:默认参数

   //ES5

       function f(x,y,z) {

                 x = x||1;

                 y = y||2;

                 z = z|| 3;

         return (x+y+z);

       }

 

       //

       //console.log(f());

       //ES6 默认参数

       function fun(x=1,y=2,z=3){

           return (x+y+z);

 

       }

         console.log(fun());

//检查参数  Error: 参数 can't 为空

function checkarguments(){

             throw new Error("参数 can't 为空");

       }

     function fun(x=checkarguments(),y=2,z=3){

           return (x+y+z);

 

       }

         console.log(fun(1));

     try{

       fun();

     }

     catch(e){

         console.log(e);

     }

     finally{

 

     }

//可变参数 arguemtns

       */ES6

   function f(...a) {

    var sum = 0;

    a.forEach(item => {

      sum += item * 1

    });

    return sum;

  }

  console.log(f(1, 2, 3, 6));

//ES5

    function fun(){

        //返回参数的和

        var sum =0;

       for(var i =0;i<arguments.length;i++)

             sum+=arguments[i]*1;

         return sum;

    }

console.log(fun(1,2,3))

 

ES6扩展运算符(合并数组)

     //ES6

     var arr = [1,"name","object"];

     var arr1 = [3,4,...arr];

     console.log(arr1);

ES5

  var arr = [1,"name","object"];

         var arr1 = [3,4].concat(arr);

         //console.log(arr1);

6:对象代理

//类似于c++  java 的私有成员,只能在内部访问,外部无法直接访问

{

    //ES3保护数据

    function Person(name,age,sex) {

             var arr = {

                   name :name,

                   age : age,

                   sex:  sex

             }

             this.set = function(key,value)

             {

                   arr[key] = value;

             }

             this.get = function(key)

             {

                   return arr[key];

             }

 

 

    }

    //通过调用特定的API

    var a = new Person("ES3","11","男");

    console.log(a.get("name"));

  

   {

       //ES5来设置私有属性

       var a = {

       name:"ES5",

       age :"18"

       };

 

       Object.defineProperty(a,"sex",{

       writable:false,

       value : "male"

       });

       try{

          a.sex = "female";

       }

       catch(e){

           console.log(e);

       }

       console.log(a);

 

     {

         //ES6使用代理的方法设置私有属性

         let person = {

            name : "ES6",

            age  : "18",

            sex  : "男"

         }

         //设置私有属性

         let person = new proxy(person,{

               get(target,key){

               return target[key]

               },

               set(target,key,value){

                 if(key!=sex)

                 {

                      target[key] = value;

                 }

               }

         })

    

     }

   }

}

原文地址:https://www.cnblogs.com/love-life-insist/p/9210295.html