1.var let const
es6 只一个js的规范
let 和 var 区别
1.let 没有变量提升
2.作用域不同 let是块级作用域 var是函数作用域
3.在同一作用域内 不能用let 同时声明同一个变量
4. let 有严格的作用域
const 和 var
const 和let极为相似 所以const 除了以上的几个还有几个特殊的特性
1.const 声明之后必须赋值 且赋值的常量不能更改 但是如果你赋值的是一个引用 那么 就可以更改
2.箭头函数
1.普通 function 的声明在变量提升中是最高的,箭头函数没有函数提升
2.箭头函数没有属于自己的this
,arguments
3.箭头函数不能作为构造函数,不能被 new,没有 property
4.不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数
5.不可以使用 new 命令,
3. map set
- set里不能有相同的值 可以用来解决常见的去除一个数组内相同值的
let arr1=[1,2,2,3,3,4,5,5,6]
let arr2=[...new Set(arr1)]
- for in forEach for of
都是进行遍历操作 for of 和 forEach 是对数组进行操作
for in 是对 对象进行操作
4.作用域
var n=123
function f1(){
console.log(n);// 123
}
function f2(){
var n=456
f1()
console.log(n); // 456
}
f2()
console.log(n); // 123
//----------------------------------------------------
var a = 10;
function test(){
//var a;
a = 100;
console.log(a);//?
console.log(this.a);
var a;
console.log(a);//?
}
test();
//100 10 100
//--------------------------------------------
( function(){
//a作用域函数作用域
var a=b=3 //实际上等同于 b=3(b就是全局变量);var a=b;
console.log(a); // 3
})();
console.log(a,b) // a is not deined(因为a是函数作用域 不是全局作用域); 3
//-----------------------------------------------------
function fun(){
console. log(n);//?123 因为函数中没有n 向全局变量去找
n = 456; // 因为没有n 找的是全局中的n 改的也是全局中的n
console. log(n); //?456
}
var n = 123;fun(n);
console.log(n) //? 这里的n已经被更改 456
函数 都是挂载在window上的 所以会先找到
arguments 是传给函数的参数形成的伪数组
this指向
function f1(){
console.log(this.x);
}
var obj={
x:10,
f:f1
}
var x=100
var f2=obj.f
f2() //100
obj.f() //10
var f2=obj.f
//这个时候obj.f直接挂载到了window上
// this 指向的就是 window
obj.f() //10
//这个时候f直接挂载到了obj上
// this 指向的就是 obj
call apply
apply 后跟要指向的对象 apply后传参要传的是数组 call后是数字
function f(s){
console.log(this.a, s); //2,3
return this.a + s;
}
var obj = {
a: 2
}
var f2 = function(){
return f.apply(obj,arguments);
}
var b = f2(3);
console.log(b); //5