es6-变量声明、函数

变量声明

小编上一篇博客有些问题这边整改一下在分享一下es6笔记

  • var
    声明有变量提升,根据之前预编译过程分析,哪怕是函数中被条件语句包裹同样也会有变量提升,var在全局中的定义相当于是给window这个大对象定义变量,且在次声明就会直接覆盖住之前的变量
  • let、constant
    块级声明也就是让所声明的变量在指定块的作用域外无法被访问,const 声明会阻止对于变量绑定与变量自身值的修改,这意味着 const 声明并不会阻止对变量成员的修改(例如数组、对象),不能对其本 身修改,这两个定义在全局如果有var定义的重复声明会报错,我们可以屏蔽掉var对象。我们可以以这样的一个方式来声明以全局变量
    let RegExp = "Hello!";
    console.log(RegExp); 
    console.log(window.RegExp === RegExp);
    
  • 暂时性死区
    在作用块级内let、constant变量声明前引用会产生暂时性死区,在这里面只要是有关于访问该变量的操作都会报错
  • 循环
    var 定义的循环内变量是外部可以访问的,通过变量提升或解析函数过程也可知案例以var定义就会输出10个10,let声明每次都创建了一个新的i变量,因此在循环内部创建的函数获得了各自的i副本,而每个i副本的值都在每次循环迭代声明变量的时候被确定了。
      var funcs = [];
      for (let i = 0; i < 10; i++) {
        funcs.push(function() {
         console.log(i);
        });
      }
      funcs.forEach(function(func) {
      func(); // 从 0 到 9 依次输出
      })
    

函数

  • 函数参数
    1.参数函数定义时参数可直接定义默认值,
    类似的:function fn(a = 1,b = 2)

    2.传递参数值为undefined的时候,参数会引用默认值(没有默认值则相当于null功能),传参如果连默认值都不使用的话该位填null(相当于不使用这个参数)

    3.实参列表arguments,为严格的实参列表(定义默认值同样不算),函数内部修改了也不算,实参可以多于定义时的数量我们同样可以用arguments返回调用

    4.参数可以引用自身之前的参数赋默认值(但反向不行我们以定义的方式去理解,参数a定义在b之前那么b之前引用b就相当于在暂时性死区使用它)

      function fn(a , b = a){
          return a + b;
      }
    
  • 参数方法 …
    作用数组、数列组合之间的相互转换,表示剩余参数,无法再中间使用,限定单个参数的方法不能使用,很多的方法需要几个参数时我们就可以将数组用这样的转换符转换就可以传进去了。

  • 函数构造器
    了解一下,同样上面介绍的方法都可以运用在他的身上

      var add = new Function("first", "second",
      "return first + second");
    
  • 名称属性
    函数的name属性有构造看构造,匿名看赋值,对象属性为匿名函数则名称为他的属性名

  • new.target元属性
    函数内部使用new.target做一个构造函数是否已经被new调用的判断,该案例之中在以call方法创造另一个对象时,因为typeof new.target === Person的存在创造对象时就if就只能执行else中的语句了

          function Person(name) {
              if (typeof new.target === Person) {
                  this.name = name; // 使用 new
              } else {
                  throw new Error("You must use new with Person.");
              }
          }
          function AnotherPerson(name) {
              Person.call(this, name);
          }
          var person = new Person("Nicholas");
          var anotherPerson = new AnotherPerson("Nicholas"); // 出错!
    
  • 块级函数
    条件语句内部声明函数在"use script"严格模式下内部声明函数会提升到函数顶部,而非标准则提升到全局,内部let定义的话没被提升到函数体顶端,而且非标准定义情况下let定义函数同样只在块级

  • 箭头函数
    (参数) =>{执行语句}
    (参数) =>() 相当于直接返回括号中内容
    不能用作于构造函数,无arguments绑定

  • 立即执行函数
    (function(){…})(参数)函数立即执行执行完销毁

你可能感兴趣的:(前端)