ItIron2021
Javascript
终於...我们终於可以稍微换个新主题了,过去的三天都聚焦在this身上,相信你也累了!
但我必须说,即便已经涵盖了许多细节,我们对this的了解还是算相对浅的,完全掌握this要花费的成本极高,且在实务上多半不会有这样的需求,面试也很少问到一些针对更底层的陷阱题,只是要应付jr等级题目的话,我们目前涵盖的范围应该是足够了?
我们马上开始今天的新主题吧,非常非常简单的一道题目,2分钟就可以搞定罗!
请解释什麽是箭头函数
防雷图,顺带一提我认为宠物当家这系列其实蛮好看的,很消遣!
这算是全系列里相对简单的问题了,其实这问题就是想问箭头函数与一般函数的差别,不要傻傻的只解释什麽箭头函数长什麽样唷! 一般来说有三个主要的不同点
一般的函数,不管你是要用expression或是declaration,大致上会是这样写
function add(a, b) {
return a + b
}
// 或是
const add = function(a, b) {
return a + b
}
而箭头函数则采用不同的写法,上述的例子改写为箭头函数可以写成
const add = (a, b) => {
return a + b
}
值得注意的有几个重点
举个例子,下方的写法与上述写法等价
const add = (a, b) => a + b
const hello = name => `hello, ${name}`
是的,又是this,但这是最後了我保证?
在一般函数中,this的指向为呼叫它的物件,但箭头函数的指向都是固定的,永远指向宣告时的物件而非使用它的物件。 卡斯柏在铁人赛:箭头函式 (Arrow functions)这篇文章就给了一个很棒的例子,我先简化它的例子来做说明。
var name = '全域阿婆'
var auntie = {
name: '漂亮阿姨',
callName: () => {
console.log('4', this.name); // 4 全域阿婆
setTimeout(() => {
console.log('5', this.name); // 5 全域阿婆
console.log('6', this); // 6 window 物件
}, 10);
}
}
auntie.callName()
由於该箭头函数在宣告时,auntie物件还是在window物件下,因此此时this会指向全域的window 物件,且由於箭头函数的指向在宣告时就决定了,後续无法用call、bind & apply改变该函数的指向。
在箭头函数的原型上并没有arguments参数让你使用,一般的函数你可以在函数中印出传入的参数
function demo() {
console.log(arguments)
}
demo(1,5,11,'Danny') // [1, 5, 11, 'Danny']
但同样的语法在箭头函数中就会出错
const demo = () => {
console.log(arguments)
}
demo(1,5,11,'Danny') // [1, 5, 11, 'Danny']
// Uncaught ReferenceError: arguments is not defined
箭头函数、this
本文章同步发布於个人部落格,有兴趣的朋友也可以来逛逛~!
>>: 【把玩Azure DevOps】Day21 建立自管的Azure DevOps Agent(Windows Container agent)
Web应用程序本身的机制并不适合用来作为执行需要长时程运行的需求,而这类需求却很常见,而常见的解决方...
今天这个,真的是插班车,因为今天作完弱扫,总共八份的测报。 我自已看得都要吐了。 在思考,这个月,因...
Meterpreter 指令 昨天介绍了 Meterpreter 的指令列表,今天带大家来实作。 我...
程序的执行基本上是循序渐进的。程序的执行未必一定是由上到下,一行一行的执行。 有时内容会因为判断,或...
前言 从今天开始的3天,我们会以更底层的角度来了解单晶片的架构,若只是要会使用STM32可以暂时先略...