You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中出现Cannot set properties of undefined(设置背景色)错误的原因

问题定位与解决方法

错误原因

你触发「Cannot set properties of undefined」错误的核心问题是:在调用addEventListener时,错误地立即执行了changeColor函数,而非传递函数本身作为事件回调。

当你写changeColor()时,函数会在代码执行到这一行时立刻运行,此时函数内部的this在非严格模式下指向window对象,严格模式下则是undefined——无论哪种情况,都不是你期望的触发事件的DOM元素,所以访问this.style必然会报错。同时,事件监听实际绑定的是函数执行后的返回值(这里函数无返回值,即undefined),导致后续点击元素时不会触发任何逻辑。

解决方法

只需要去掉changeColor后面的括号,传递函数引用给addEventListener即可。这样当事件触发时,浏览器会自动调用该函数,并将this指向触发事件的DOM元素:

let btn = document.querySelector('button');
let h1 = document.querySelector('h1');
let h2 = document.querySelector('h2');
let p = document.querySelector('p');

function changeColor () {
    console.dir(this.innerText);
    this.style.backgroundColor = "blue";
}

// 移除括号,传递函数引用
btn.addEventListener("click", changeColor);
h1.addEventListener("click", changeColor);
h2.addEventListener("click", changeColor);
p.addEventListener("click", changeColor);

补充提示

如果后续需要给回调函数传递自定义参数,才需要用匿名函数包裹,比如:

btn.addEventListener("click", () => changeColor("customParam"));

但在当前场景下,直接传递函数引用就能满足需求。

内容的提问来源于stack exchange,提问作者Nabin Bista

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:32:35