1.转码工具babel
REPL环境: https://www.cnblogs.com/AnnieShen/p/6028304.html
1.暂时性死区
不报错:
<script> var tem=123; if(2>1){ tem='wer'; let a; console.log(tem); } </script>
报错:
<script> var tem=123; if(2>1){ tem='wer'; let tem; console.log(tem); } </script>
ES5时,没有块级作用域,会出现变量提升,相当于把变量提升到全局,把最初的覆盖,但变量提升了,实际还没有赋值。
ES5的立即执行函数表达式(IIFE)可以省略了。 https://www.cnblogs.com/keketest/p/6121228.html
块级作用域: 打印5
<script> function f1() { let n = 5; if (true) { let n = 10; } console.log(n); // 5 } f1(); </script>
变量提升: 打印10
<script> function f1() { var n = 5; if (true) { var n = 10; } console.log(n); //10 } f1(); </script>
函数提升:
ES5 是把 函数a 内定义的 函数b 提升到 a的顶部。
在ES6 的浏览器 是把 函数a 内定义的 函数b 相当于 未赋值的变量 提升到 a的顶部。不是ES6的浏览器当let处理。
常量完全冻结:
定义一个常量 函数constantize 等于一个将对象冻结的函数。
阻止给对象添加属性的特效果和值,遍历对象自身可枚举的属性,
在匿名箭头函数里,如果每个属性的类型都是对象,执行定义的函数,冻结obj的每一个属性。
Object.freeze() 阻止修改现有属性的特性和值,并阻止添加新属性。
Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组。
箭头函数:https://blog.csdn.net/qq_35313994/article/details/78408288
https://www.cnblogs.com/snandy/p/4403111.html
2. 声明变量的6种方法
var name=。。。
个人领悟:函数声明类似class和var结合,function是一个像var一样的东西,name()是变量名,可以在里面写参数,{}就向class的大括号一样。
function name(){
}