变量声明
注:es6 中变量声明方式6种 var function let const class import 形参
总结: 【es6中语法】 在同一个作用域中【变量名】不能重复;
function 定义函数 函数声明提升
var 声明变量 变量提升
let 声明的变量
只能在当前块中使用。let 声明的变量;决定变量能在哪里使用;而不是形成一个作用域
注意事项
1.在当前{}中不能重复声明let 声明的变量
2.在当前{}中 let 声明的变量之前不能使用该变量 ----暂时性死区 不能变量提升
3.函数体中 let 不能声明形参
4. 再同一个作用域中let 不能声明函数名
5.内层{} 声明的变量不影响外层{} 声明的变量
var 声明的变量;在提升;只要遇到let重名,一律报错;不允许重复,默认提升到当前let的块级域顶端
-for 中的let 默认()中的let为父级作用域,{}let为子级作用域
for循环特殊,执行多次所以可以形成多个块级作用域
块级作用作用域
let const 声明的变量能在哪里用的问题
- 没有变量提升
- 不能重复命名
- 块级作用域
模板字符串
+ 模板字符串的基本用法
var s1 = `abc`
+ 模板字符串的优势:
var obj = {name:'',age:5};
var s1 = "我叫: "+obj.name+",今年:"+obj.age+"岁。"
结构赋值
结构赋值;赋值的内容要么是对象要么是数组。其他类型会报错的
是从对象和数组中取值的一种方式
+ 对象的结构赋值
var obj = {name:"张三"age:18}
var {name.age}=obj;
//生成2个变量
//name值来自于obj.name
//age值来自obj.age
+ 函数参数的结构赋值
function f1(obj){
console.log(obj.age);
console.log(obj.height)
}
//等价于
function f1({age,height}){
console.log(age);
console.log(height)
}
f1({age:5,height:180})
+ 补充:属性的简写
var a =3;
var c = 10;
var b = {a,c};
//b对象有一个a属性,a属性的值,来自于a变量
//还有一个c属性,c属性的值来自于c变量
console.log(b)
super
- 1:super 只存在对象的简写函数中
- 2:super 指向的原型对象
如何判断:super为那个原型对象?
1.判断简写函数中this
2.再找super ,**super == this._prot_**
对象中function的简写
var obj = {
foo(){}
}
1.you this 有super
2.不能 obj.foo.prptotype修改foo的原型
3.object.setprototypeOf(obj.foo,{})修改foo原型