• 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、解构赋值

  • 相关阅读:
    POJ1094(Topological Sort)
    POJ1258(Minimum Spanning Tree,Prim)
    POJ2509(Water,Greedy)
    POJ1258(Minimum Spanning Tree,Kruskal)
    POJ1256(permutation)
    POJ2790(BFS)
    HDU 1527 取石子游戏
    POJ Mayor's posters
    HDU 1907 John
    HDU 2516 取石子游戏
  • 原文地址:https://www.cnblogs.com/shirly77/p/6667860.html
Copyright © 2020-2023  润新知