电话
400 9058 355
箭头函数没有自己的this,继承外层作用域的this;不能用作构造函数,无prototype和arguments;简写语法需注意对象字面量要加括号;适合短回调,不适用于需动态this或复杂逻辑的场景。
this,它继承外层作用域的 this
这是最常踩坑的地方。普通函数的 this 取决于调用方式(如 obj.method() 中 this 指向 obj),而箭头函数根本不绑定 this,它直接沿作用域链向上找外层函数的 this。
典型错误场景:
const obj = { name: 'a'
, fn: () => console.log(this.name) } → this 指向全局或 undefined(严格模式),不是 obj
button.addEventListener('click', () => this.handleClick()) → 如果写在类方法里,this 是类实例;但如果写在全局,就不是prototype 和 arguments
它没有 [[Construct]] 内部方法,所以不能被 new 调用,否则报错:TypeError: xxx is not a constructor。
同时:
arguments 对象 —— 用剩余参数 ...args 替代prototype 属性 —— ArrowFn.prototype 是 undefined
yield,不支持生成器语法return 和花括号只适用于单表达式这是写错逻辑的高发区。以下写法看似简洁,实则隐含返回值:
const add = (a, b) => a + b; // ✅ 返回 a + b
const obj = (a, b) => ({ a, b }); // ✅ 注意括号:必须包一层小括号,否则被解析为代码块
const broken = (a, b) => { a, b }; // ❌ 代码块,无 return,返回 undefined常见误判点:
(),结果返回 undefined
return,以为会隐式返回,实际不会return,且要用 {}
它不是“更现代的函数”,而是有明确设计意图的语法糖:简化无状态、无 this 绑定需求的函数表达式。
该用箭头函数的场景:
array.map(x => x * 2)setTimeout(() => doSomething(), 100)this 指向正确)不该用的场景:
this 的方法(如 Vue 方法、类原型方法)arguments 或 new 实例化的函数anonymous)真正容易被忽略的是:箭头函数的「词法 this」是静态的 —— 它在定义时就锁定了外层 this 值,哪怕之后外层 this 改变,它也不会变。这个特性既强大又危险,用前得确认外层作用域是否稳定。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...