箭头函数:
let sayName=()=>{
// 函数体
}
箭头函数内部this指向
let name = 'zhangsan';// let声明的全局变量不属于全局对象,存在于一个块级作用域中也就是当前文件模块中
let sayName=()=>{
console.log(this.name);//这里的this指向外层的this,因此指向全局对象
}
sayName();//undefined 全局对象中不存在name属性
console.log(this);//{} 全局中的this指向的是module.exports
运行结果为undefined。因为箭头函数实际上是没有this的,函数内部的this指向外部声明箭头函数时的this。
全局变量var、let&const区别
var
1.全局的 var 变量其实仅仅是为 global 对象添加了一条属性。
var name='zhangsan';
// 等同于 windows.name='zhangsan';
console.log(windows.name);//zhangsan
2.var声明的变量会提升,可以重复声明,具有函数作用域
只能在对应代码块中使用
4.const声明的变量在声明的时候就需要赋值,并且只能赋值一次,不能修改。
let / const
1.用 let 和 const 声明的全局变量并没有在全局对象中,只是一个块级作用域(Script)中
箭头函数中的this问题,如下案例:
//1.
let name = 'zhangsan';
let sayName=()=>{
console.log(this.name);
}
console.log(this.name);// undefined this存在于全局中,指向module.exports
module.exports.name = 'lisi'; // 给module.exports添加属性
console.log(this.name);// 此时输出结果为:lisi
sayName();// 箭头函数的this指向全局this, 因此打印结果为lisi
//2.
let name = 'zhangsan';
module.exports.name = 'lisi';
let sayName=()=>{
console.log(this.name);
}
let obj = {
name,
sayName(){
console.log(this.name);//zhangsan
return sayName();//lisi 这里的sayName不是声明在方法中的,只是在这里被调用,因此这里的this指向外部声明函数时的this
}
}
2.let/const不会变量提升,不可以重复声明,具有局部作用域。const:声明时候必须赋值
2.1.let 用于声明一个变量
1 变量不会提升,即在变量声明之前无法使用该变量
2.不可以重复声明
3.具有块级作用域,只在当前作用域有效
2.2.const 用于声明一个常量
1.变量声明不会被提升,即在变量声明之前无法使用该变量
2.不允许重复声明。
3.具有局部作用域,即const声明的变量
global与module区别
global
global是全局属性,凌驾于所有单独的模块之上,global的属性各个模块都可以访问到,不需要使用module.exports暴露出去
module
一个文件就是一个模块,单个模块的顶级对象就是module,module包含了当前模块的所有信息,
而module.exports指的是当前文档所暴露的内容。模块内部的变量只能在当前模块使用,模块内的属
性想要被其他模块访问,需要使用module.exports暴露。
普通函数和箭头函数的区别
1.表现形式不同
// 普通函数
function fun(){
// 函数体
}
// 箭头函数
let fun=()=>{
// 函数体
}
2.普通函数的arguments保存实际参数
3.箭头函数rest参数保存实际参数
// rest参数 返回一个保存实参得数组 拓展运算符
let test=(a,...b)=>{
// ...拓展运算符
console.log(a,b);// 1 [ 2, 3 ]
// es6 箭头函数 arguments不再保存实参列表
console.log(arguments,2);//[Arguments] {......} 2
}
test(1,2,3)
4.this指向问题
普通函数:this总是指向调用它的对象,如果用作构造函数,this指向创建的对象实例。可以通过call()、apply()和bind()方法改变this指向
箭头函数:箭头函数本身没有this,内部this指向声明箭头函数时外部作用域this,无法改变箭头函数的指向。