看了不少的资料,虽然也有好多的知识不懂,但是我可以简单的分享下我的结论,有误的地方请大佬指正
作用域我看了几篇文章搞糊涂了,一个说 作用域就是大括号包含的。还有一个说 作用域是抽象的作用范围,没有具体的指向谁。 虽然我更倾向第二个,但是,下面的文章我写的是函数体。
普通函数与箭头函数的对比
普通函数:
// 普通函数的声明式写法
// function func(){
// console.log('我是声明式写法')
// }
// 1.普通函数(赋值式写法)
let func = function () {
console.log('我是赋值式写法')
}
func() // 我是赋值式写法
箭头函数:
// 2.箭头函数(只可以赋值式写法,不可声明式写法)
let func1 = () => {
console.log('我是箭头函数')
}
func1() // 我是箭头函数
参数只有一个时,可以省略小括号
let func2 = a => {
return console.log(a + a)
}
func2(2) // 4
函数体中只有一行代码时,可以省略大括号和return
let func3 = (a) => console.log(a * a)
func3(2) // 4
箭头函数与普通函数的this问题
普通函数的this:
let func4 = function () {
console.log(this)
}
func4(); // window
// 对象中的函数this指向
let obj = {
func1:function () {
console.log(this);
}
}
// 普通函数有自己this,而对象调用了这个函数,所以指向对象
obj.func1(); // obj对象
箭头函数的this
let func5 = () => console.log(this);
func5(); // window
let obj1 = {
func1:() => console.log(this)
}
// 箭头函数自身没有this,但是它会从自身函数体一层一层的向外找this,找到了对象的this
// 对象的this指向window
obj1.func1(); // window
不怎么理解??我在来个例子
let obj2 = {
i:2,
func1: () => console.log(this.i)
}
// 因为箭头函数没有this,所以它的this就是obj2的this。
// 而obj2的this指向的window。在全局没有定义变量i,所以为undefined
obj2.func1(); // undefined
结语
希望能对小伙伴们有所帮助,这里写的例子有点少,我感觉理解起来会很容易的吧。如果小伙伴们掌握牢固了,可以看高阶函数中的例子。当然了,在promise中也比较常用箭头函数。最后感谢小伙伴们的大力支持。。。