JS报错Cannot assign to function call,能否对函数调用结果直接赋值
问题结论
JavaScript 不支持你示例里给函数调用结果直接赋值的写法,你遇到的Cannot assign to function call报错是符合JS语法规则的正常现象。
错误原因
- JS 语法规定:赋值操作的等号左侧(左值)必须是可写入的引用目标(比如变量、对象属性、数组元素),函数调用的返回值属于「值类型」,不是可被赋值的引用,天然不能放在等号左侧。
- 你当前编写的
dom函数返回的是对应元素innerHTML的字符串值,相当于你的代码执行时等价于写了"当前元素的innerHTML文本" = maid,字符串常量本身不支持被赋值,自然会抛出错误。
可行实现方案
给你两种常用的改造方案,都能实现你要的简化操作需求:
方案1:返回DOM元素本身(更通用)
让函数直接返回DOM元素对象,后续你可以自由操作它的innerHTML、样式、事件等各种属性:
var maid = "Made In Yiappa"; function dom(i) { // 直接返回DOM元素,而非innerHTML的内容 return document.getElementById(i); } // 赋值innerHTML的写法 dom("country").innerHTML = maid; // 后续也可以操作其他属性,比如修改样式 dom("country").style.color = "red";
方案2:封装innerHTML读写逻辑(更简洁)
如果你就是想简化innerHTML的读写操作,可以给函数加第二个参数,传值时自动赋值,不传值时返回当前内容:
var maid = "Made In Yiappa"; function dom(i, value) { const el = document.getElementById(i); // 传了第二个参数就执行赋值逻辑 if (value !== undefined) { el.innerHTML = value; } // 没传参数就返回当前innerHTML内容 else { return el.innerHTML; } } // 赋值写法,不需要写等号 dom("country", maid); // 读取内容的写法 const currentContent = dom("country");
内容的提问来源于stack exchange,提问作者stackBD21
相关产品推荐
相关产品推荐

