es6 一些小知识

本人最近被es6感兴趣了,学习一些,以下就是自己总结的一些小知识

1、当你在百度输入"es6"关键字,点击进入es6入门,首先你需要知道怎样学习的顺序,先看第21章Module语法,

严格模式

ES6 的模块自动采用严格模式,不管你有没有在模块头部加上"use strict";

严格模式主要有以下限制。

  • 变量必须声明后再使用 例如:let
  • 函数的参数不能有同名属性,否则报错 例如:const let
  • 不能使用with语句
  • 不能对只读属性赋值,否则报错 例如:const
  • 不能使用前缀0表示八进制数,否则报错
  • 不能删除不可删除的属性,否则报错 例如:数组的length
  • 不能删除变量delete prop,会报错,只能删除属性delete global[prop]
  • eval不会在它的外层作用域引入变量
  • evalarguments不能被重新赋值
  • arguments不会自动反映函数参数的变化
  • 不能使用arguments.callee
  • 不能使用arguments.caller
  • 禁止this指向全局对象
  • 不能使用fn.callerfn.arguments获取函数调用的堆栈
  • 增加了保留字(比如protectedstaticinterface

arguments.callee  与 argument.caller

function fatherCheck() {
    check("");
    function check() {
        sonCheck();
        function sonCheck() {
            console.log(arguments.callee);
            console.log(sonCheck.caller.caller)
        }
    }
}
fatherCheck();

 arguments.callee返回sonCheck的函数体(当前正在执行的函数),sonCheck.caller返回调用sonCheck的函数,即check,而再往上一层,sonCheck.caller.caller就是返回调用check的函数体,也就是fatherCheck。那如果是继续往上一层呢?sonCheck.caller.caller.caller?就会变成null。书里也有讲,arguments.caller在非严格模式下永远是undefined。我们就可以判断值是null还是undefined来区分arguments.caller和函数的caller。

2、let 与 const

es5中的var变量 , 1)没有块级作用域;2)指向全局,可以解析和变量的提前声明;3)可以相互覆盖

es6中的const 主要是为了让变量更加安全,不会相互覆盖(只读属性)

es6中的let 1)没有解析与变量的提前声明,只能声明后调用; 2)不指向全局,块级作用域,作用域更安全;3)不能重复声明,否则会报错

var b = [1,2,3,4,5,6,7,8,9,10];
for(let i=0; i<b.length; i++){
     b[i] = function(){
        console.log(i)
     }
     // b[i](); 输出 0 1 2 3 4 5 6 7 8 9
} b[
6](); // 6
b[i](); //报错

3、解构赋值

 

posted @ 2017-04-05 11:15  shirleyYing  阅读(379)  评论(0编辑  收藏  举报