·

JS箭头函数详解

发布时间:2024-08-29 11:31:13阅读量:194
转载请注明来源

1. 认识箭头函数

es6 新增了使用胖箭头(=>)语法定义函数表达式的能力,很大程度上,箭头函数实例化的函数对象与正式的函数表达式创建的函数对象行为是相同的。任何可以使用函数表达式的地方,都可以使用箭头函数:

// 普通函数
let sum = function(a, b) {
	return a + b;
}

// 箭头函数
let sum1 = (a, b) => {
	return a + b;
}

箭头函数简洁的语法对开发者来说是十分友好的,从上面的例子可以得知箭头函数的简单用法:

(参数) => { 函数体 }

2. 箭头函数的一些用法

1. 省略包含参数的小括号

如果只有一个参数,那也可以不用括号。只有没有参数,或者多个参数的情况下,才需要使用括号:

// 有效
let sum = (x) => {
	return x;
};
// 有效
let sum1 = x => {
	return x;
};
// 没有参数需要括号
let sum2 = () => {
	return 1;
};
// 有多个参数需要括号
let sum3 = (a, b) => {
	return a + b;
};

2. 省略包含函数体的大括号

箭头函数也可以不用大括号,但这样会改变函数的行为。使用大括号就说明包含“函数体”,可以在一个函数中包含多条语句,跟常规的函数一样。

  • 省略大括号箭头后面就只能有一行代码;
  • 省略大括号会隐式返回这行代码的值;
  • 省略大括号不能写return。
// 有效
let sum = (a, b) => {
	return a + b;
};
// 有效
let sum1 = (a, b) => a + b; // 相当于 return a + b;
// 无效的写法
let sum2 = (a, b) => return a + b;

3. 嵌入函数

箭头函数简洁的语法非常适合嵌入函数的场景:

let arr = [1, 2, 3, 4, 5];
arr.map(val => val * 2); // [2, 4, 6, 8, 10]

3. 箭头函数不能使用arguments

如果函数是使用箭头语法定义的,那么传给函数的参数将不能使用 arguments 关键字访问:

// 普通函数
let sum = function() {
	return arguments.length;
}
sum(1, 2, 3); // 3

// 箭头函数
let sum1 = () => {
	return arguments.length;
}

sum1(1, 2); // Uncaught ReferenceError: arguments is not defined

虽然箭头函数中没有 arguments 对象,但可以在包装函数中把它提供给箭头函数:

function foo() {
	let bar = () => {
		console.log(arguments.length);
	}
	bar(); 
}
foo(5, 5, 5);  // 3

4. 箭头函数中this 指向

let num = 11;
const obj1 = {
	num: 22,
	fn1: function() {
		let num = 33;
		const obj2 = {
			num: 44,
			fn2: () => {
				console.log(this.num);
			}
		}
		obj2.fn2();
	}
}
obj1.fn1(); // 22

fn2中得到的结果为:22

原因箭头函数没有this,箭头函数的this是继承父执行上下文里面的this ,这里箭头函数的执行上下文是函数fn1(),所以它就继承了fn1()的this,obj1调用的fn1,所以fn1的this指向obj1, 所以obj1.num 为 22。

注意:简单对象(非函数)是没有执行上下文的!

如果fn1也是个箭头函数呢?

let num = 11; // 
const obj1 = {
	num: 22,
	fn1: () => {
		let num = 33;
		const obj2 = {
			num: 44,
			fn2: () => {
				console.log(this.num);
			}
		}
		obj2.fn2();
	}
}
obj1.fn1();

上述结果为undefined,因为fn1也是一个箭头函数,所以它就只能继续向上找也就是window了。

那为什么是undefined而不是11呢?

这里涉及到var和let声明变量的一个区别:使用 let 在全局作用域中声明的变量不会成为 window 对象的属性,var 声明的变量则会(不过,let 声明仍然是在全局作用域中发生的,相应变量会在页面的生命周期内存续,所以使用window访问会为undefined):

var a = 1;
window.a; // 1

let b = 1;
window.b; // undefined

将let改成var后:

var num = 11; // 
const obj1 = {
	num: 22,
	fn1: () => {
		let num = 33;
		const obj2 = {
			num: 44,
			fn2: () => {
				console.log(this.num);
			}
		}
		obj2.fn2();
	}
}
obj1.fn1();

此时结果为window.num => 11


原文链接:https://blog.csdn.net/weixin_45112114/article/details/123358639

0 人喜欢

评论区

暂无评论,来发布第一条评论吧!

弦圈热门内容

你对自己的哪本数学启蒙书印象最深刻?

相信每一个喜欢数学的人,都曾被某几本书中描述的数学内容所深深震撼,从而一发不可收拾的踏上数学这条“不归路”😂。 我至今还记得初三高一的时候,自己第一次看代数几何的那种震撼(GTM52),当时的我涉猎过泛函分析、范畴论、微分几何等数学分支,但唯有代数几何给予我心灵上最大的震撼。 我为代数几何这个艰深、深奥、广阔、神秘的领域所深深吸引,加上当时知道了Grothendieck的事迹,让我下定决心攻克代数几何的重重难关,只为更接近心中的“神”😂。 不知道你的数学启蒙书是哪几本呢?其中哪本书你印象最深刻呢?

面具下的自我:《西力传》中的个体困境

来自 热心市民年糕先生 的 投稿 :1983年,伍迪·艾伦执导的虚构纪录片《西力传》上映后立即引发轰动。简单来说,主人公莱昂纳德·西力是一个特殊的人,他能够根据周围环境迅速改变自己的外表和性格,成为一个“完美的镜子”,反射周遭人的一举一动。他就像一根柔软的芦苇,随环境风吹草动。01#理想自我的困境西力的“特殊能力”恰恰凸显了普通人在社会生活中也面临的困境:我们时常会为了讨好他人、获得认同而隐藏内心的真实想法,扮演一个“理想的自我”。我们会在不同的社交场合下带上各式各样的“面具”,以适应环境期待。然而区别在于,西力已经把这种现象发挥到了极致——他看似拥有百变的人格,实则丧失了独立的自我。西力的人格是如此脆弱不堪,以至于最微弱的环境变化都能引发他的改变。他就像海绵一样吸收周围的特征。这似乎揭示了一个令人不安的事实:我们的自我认同其实并不如想象中那样坚固,它极易受到外在力量的影响和操纵。02#one?A面。从社会学的角度看,个体之所以会产生强烈的"他者依赖",在于个体需要通过社会互动建立自我认同。正如符号互动论者米德所言,个体的自我意识来源于他人对自己的定义和期待。个体通过扮演社会角色获得认 ...

有兄弟知道李代数那本书比较好吗

目前在做机器人,想学习李代数的知识咨询一下各位大佬

如果中国拿了菲尔兹奖,那中国是不是可以算作数学强国了?

我的回答:如果中国有持续培养纯本土菲尔兹奖得主的能力,那么才可算作数学强国。这东西都得谈可持续性,不能因为个别一两个华人拿了菲尔兹奖就觉得很厉害了。现在中国很多杰出的年轻一辈数学家,都是接受过海外教育的,或者在海外任职的,证明中国数学界还脱离不了国外的培养体系。一个中国国籍的学者经过国外的教育后得到菲尔兹奖,与一个华裔学者在国外得到菲尔兹奖,除了能够满足民族自信心外,没多大区别。Yuhang Liu的回答:等中国自己建设的数学期刊进入中科院自己评的一区再说吧。我不记得中国科学-数学是不是一区,别的应该都不是。这也不是什么不合理的要求。Annals 本来也就相当于普林的一个校刊而已。你有足够多学术地位受认可的编辑,然后华人数学家把自己的大作品都往这上面投,学术地位高了,自然国外的牛人也会往中国的期刊投稿。若是连这一步都不敢想象,也不必谈数学强国了。家里蹲大学的回答:谢邀,你是想说最近王虹解决三维Fakeya猜想的工作吗?即使拿了,我也不觉得这么认为,如果一枚菲尔茨奖章就作为数学强国,我想 巴西,越南,韩国,都可以算作数学强国了。如果有一天,本土(所有教育都在国内完成)真的出现了获得菲尔茨 ...

中国教育最大的成功在哪里?谈谈中国教育的优点

珑霖君的回答:清华大学,计算机水平,2018年最新数据,世界第一。一年5000元,四年20000元,相当于3100美元。走绿色通道,学费毕业后再交。去不发达地区就业,学费全免。我堂妹美国加州大学洛杉矶分校,读计算机,一年70000美元,四年280000美元,相当于176万人民币。排名还不如清华大学。二叔的家庭在美国属于中产偏上了,面对这笔巨款也是卖了国内的房才能支付。就这点,我真心觉得中国教育在给寒门学子留出路。数据来源:2018年全球最佳大学排行榜:清华大学计算机专业排名全球第一刚一天就10K的赞,吓尿。————————鉴于答案很火,也跑个题,说两句这种低廉教育的弊端,就是对个人的严重不尊重。我国教育是一种低成本的“工业化”教育,一个班里多个学生的成本也仅仅是多套桌椅,目的是最大程度普及教育,保障尽量多人的受教育权。但是也很容易把所有人培养成一模一样的人,并且充满了粗暴的强制性,我有时候觉得中国的教育根本就不是教育,而是一种强硬的规训。加上我国的这种集体主义,对部分人很摧残。比如我这种很自我的人,极其厌恶这种教育方式,也导致了我对于集体的严重反感。这让我小学和中学这12年很痛苦,到了 ...

国内的教育体系已崩溃?如何客观地看待中国应试教育?

NIO倒闭了嘛的回答:国内的教育体系趁着2024年的就业市场反馈已经崩盘了,大部分人大四和硕士期间的实习日薪还没现在补课的时薪高。绝大部分人读十几年书不如去学捏十年寿司,现在想靠卷高考翻身就跟1900年梭哈科举差不多了。十年前大家只是调侃一下文编理润,但那时候二本靠谱点的考编都是一次上岸,区别就是上哪里的。二本理科读个江苏大学,上海理工这种级别的硕士,三十岁也能混到三十万的年薪。江苏大学和上海理工进个上汽泛亚校招22W当年是有手就行,有点实力的应届生都能拿到30+的年薪。2024年的行情大致就是,高中本科硕士十年的培训完的80%的人时薪是干不过隔壁日本的零工。而且大部分工科硕士的就业环境真比便利店差远了。便利店至少不会爆炸和时不时冒出来一个工伤,也没什么难闻的气味和可吸入粉尘。而文科方面,十几年前大家印象还是硕士还来银行?24年是双非硕士还敢投我们银行的简历?除了编制外,文科整体就业就靠新东方一类的第三产业挽尊,去个新东方还能看见落地玻璃和高楼,不用面对奇奇怪怪的人。而其他招文科的制造业普遍都是杵在车间隔壁开个四五千的月薪,时不时要面对一下油腻领导的骚扰。而现在广告,传媒,游戏,留学这 ...