




//普通声明
let a;//一次性声明多个变量
let a,b,c;//声明并且初始化
let a = 100;//一次性声明多个并且初始化
let a=2,b=1,c='i love you';
//使用 var 进行声明时下述代码不会报错
var a = 1;
var a = 2;//使用 let 进行声明时下述代码会报错
let a = 3;
let a = [];
块的范围一般包括 if else while for 等
//es6中变量作用域的范围,除了全局作用域/函数作用域/eval作用域,还有块级作用域
{var a = 6;let b =7
}
//a可以正常打印
console.log(a)
//b会报错is not defined
console.log(b)
//a会输出undefined,因为对变量的声明自动提升了
console.log(a);//b会报错 cannot access before initialization,因为不能提升
console.log(b);var a = 2;
let b = 3;
let a = 2;
function fn(){return a;
}
//可以通过作用域链获取到a并返回
console.log(fn());
例如,现在想给每一个div设置背景颜色为粉色
Document
const A = 1;
//必须赋初始值,下面这种情况会报错const A;
//常量的值不能修改,下面的赋值语句会报错const A = 1;A = 2;
{const A = 1;}//会报错console.log(A)
const A = [1,2,3]A.push(4)console.log('[ A ] >', A)

let arr = [1,2,3]let [a,b,c] = arrconsole.log('[ a ] >', a)console.log('[ b ] >', b)console.log('[ c ] >', c)

let student = {name : 'ljk',age : 10,whatHeSay : 'i love sy'
}let{name,age,whatHeSay} = studentconsole.log('[ name ] >', name)
console.log('[ age ] >', age)
console.log('[ whatHeSay ] >', whatHeSay)

let a = `sdfsdfs`;console.log('[ a ] >', a)console.log('[ typeOfa ] >', typeof a)

let a = `- a
- a
- a
- a
- a
`;
console.log('[ a ] >', a)

let a = `123`
let b = `${a}456`
console.log('[ b ] >', b)
var name = "a"
var age = 10//这是之前的写法
// let student = {
// name:name,
// age:age,
// speech:function(){
// return this.age
// }
// }let student = {name,age,speech(){return this.age}
}
console.log('[ student ] >', student)
console.log('[ student.speech ] >', student.speech())
//正常写函数
let a = function(){}//去掉function关键字,后面加上箭头,就是箭头函数
let b = () => {}//调用方式和普通函数一样
b();//当形参有且只有一个的时候,小括号可以省略
let add = (n) => {return n + 1
}
//可以写成如下方式
let add = n => {return n + 1
}//当函数体仅有一行时,大括号可以省略,上述代码可以如下这样写,注意要去掉return关键字
let add = n => n + 1
let fn = function(){console.log('[ name ] >', this.name)
}let fnArr = () => {console.log('[ name ] >', this.name)
}window.name = 'window name'const bean = {name:'beanName'}//正常调用时,this均是window
fn();
fnArr();console.log('[ -------- ] >')//采用call时,普通函数的this是当前对象
fn.call(bean)
//而箭头函数的this还是window,它是静态的,始终是声明时所在作用域下的this
fnArr.call(bean)

//普通的构造方法let person = function(name,age){this.name = name;this.age = age;}//箭头函数的构造方法let personArr = (name,age) => {this.name = name;this.age = age;}//能够进行调用console.log('[ person ] >', new person("ljk",20))//调用的时候会报错console.log('[ personArr ] >', new personArr("sy",21))

//正常函数
let fn = function(){console.log('[ arguments ] >', arguments)
}
//箭头函数
let fnArr = () => {console.log('[ arguments ] >', arguments)
}
