学习笔记:ES6之var let const区别和箭头函数的理解



window.onload = function() {
  //浏览器预解析  先解析 var function
  console.log(c) //c is not defind
  var a = 1;
  var b;
  c = 2;
  d()//3
  function d() {//函数声明
    console.log(3)
  }
  e() //e is not a function
  var e = function() {//函数表达式
    console.log(4)
  }

  // 变量和函数重名时,函数的优先级比变量高   PS:预解析(执行是由上而下)
  // 函数和函数重名时,遵循由上而下
  console.log(f) //打印出函数体
  var f = 123;
  function f() {
    console.log(456);
  }

  //预解析
  //var f; 未定义
  //f 的值 函数本身
  //执行过程
  //f = 123;

  //常见面试题
  console.log(a); //预解析时,变量与函数名重复,函数优先  //打印出最后一个函数体
  var a = 1;
  function a(){
    console.log(2);
  }
  console.log(a) //1
  var a = 3;
  console.log(a)//3
  function a(){
    console.log(4)
  }
  console.log(a)//3

  /** let const
   * 1、不存在变量提升
   * 2、同一个作用域内不能重复定义
   * 3、有着严格的作用域
   *
   * const
   * 4、声明一个只读常量,一旦声明,常量的值就不能改变
   * 5、必须有初始化值
   * 6、如果定义的值是个对象或者数组则可以改变内部值
   */

  //let const 不存在变量提升
  console.log(x); //x is not defined
  let x = 1;

  //作用域 es5 全局作用域 函数作用域
  // var a1 = 1;
  // function f1(params) {
  //   console.log('f1中'.a1) //undefined  预解析
  //   var a1 = 2
  // }
  // f1() // undefined
  // console.log("外",a1) //1

    var a1 = 1;
    function f1(params) {
      console.log('f1中'.a1) //undefined  预解析
      a1 = 2
    }
    f1() // 1
    console.log("外", a1) //2

    // 同一个作用域中不能重复定义同一个名称
    let a = 10;
    let a = 20;//error
    //var 属于函数作用域  let 属于块级作用域{}
    function f2() {
      var n =10;
      if(true){
        var n = 20;
      }
      console.log(n)
    }
    f2()//20

    function f3() {
      let n =10;
      if(true){
        let n = 20;
      }
      console.log(n)
    }
    f2()//10

    //const  定义只读常量
    const a = 2;
    a=5; //error
    const a; //error
    const obj={};
    obj.name = 'abc'
    const obj = [] //error
    const arr = []
    arr.push(1)


    //箭头函数(下面两个函数相等)
    var f = v => v; // var 变量名 = 参数 => 函数体  (默认有return)
    var f = function(v) {
      return v;
    }

    var f = function() {
      return 123;
    }
    var f = () => 123

    var f = function(n1,n2) {
      return n1+n2;
    }
    var f = (n1,n2) => n1+n2;

    var f = function(n1,n2) {
      list(n1+n2);
    }
    var f = (n1,n2) => {list(n1+n2)};
    var f = (n1,n2) => ({name:n1,age:n2});//除对象以外 用{}


    //数据结构  数组 对象
    //新增数据类型 :set类似数组 map 类似对象
    var m = new Map()
    m.set('name','tina') //方法:设置
    m.get('name') //方法:获取
    m.size; //获取长度
//babel
//对象遍历用 for in
//map遍历用 for of

var arr = ['a','b','c'];
for(let v of arr){
  console.log(v) // a  b  c
}
for(let [key,value] of m){
  console.log()
}



}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值