讲师中心 微信公众号

工具推荐

视频效率加速
AniShort
AniShort

AI短剧协同制作平台

updream

一键生成高质量推广成片

剧云
剧云

中文短剧剧本制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

修复矩阵计算器中加减函数执行一次后失效的问题

云敏大大_4632

云敏大大_4632

发布时间:2026-01-29 12:27:12

|

227人浏览过

|

来源于php中文网

原创

修复矩阵计算器中加减函数执行一次后失效的问题 - php中文网

本文详解为何矩阵计算器的加法和减法函数在首次调用后无法再次触发,并指出根本原因是变量名与函数名冲突导致函数被意外覆盖,提供清晰的修复方案与健壮代码实践。

在您提供的矩阵计算器代码中,add() 和 sub() 函数看似逻辑完整,但运行一次后便“消失”——点击按钮不再响应。问题并非出在 this 关键字,而是一个更隐蔽却极为常见的 JavaScript 命名陷阱:函数名被同名局部赋值语句意外覆盖。

关键错误出现在以下两行:

add = parseInt(this[x]) + parseInt(this[y]); // ❌ 覆盖了全局函数 add
sub = parseInt(this[x]) - parseInt(this[y]); // ❌ 覆盖了全局函数 sub

由于未使用 var、let 或 const 声明,JavaScript 将其视为对全局对象(如 window)属性的赋值。当 add = ... 执行后,原本指向函数的 window.add 被替换为一个数字(如 5),后续点击

使用华数设计生成高保真HTML原型、演示文稿、动画和设计评审
使用华数设计生成高保真HTML原型、演示文稿、动画和设计评审

使用经过文档化的设计技能,从真实的品牌或项目背景中生成HTML原生原型、幻灯片、动态演示、可视化图表和评审流程。

下载

✅ 正确做法是:始终为中间计算结果声明独立的、语义明确的局部变量,避免与函数名、DOM ID 或其他标识符冲突。以下是修复后的核心函数(已整合健壮性改进):

function add() {
    const r = parseInt(rr.value) || 2;
    const c = parseInt(cc.value) || 3;
    const t = r * c;
    o.innerHTML = ''; // 清空输出区(比 textContent 更安全,保留 input 元素结构)

    for (let i = 1; i <= t; i++) {
        const aVal = parseFloat(document.getElementById(`a${i}`).value) || 0;
        const bVal = parseFloat(document.getElementById(`b${i}`).value) || 0;
        const result = aVal + bVal; // ✅ 使用专属变量名,绝不复用 'add'

        o.innerHTML += `<input type="number" value="${result}" readonly style="background:#f0f0f0;">`;
    }
}

function sub() {
    const r = parseInt(rr.value) || 2;
    const c = parseInt(cc.value) || 3;
    const t = r * c;
    o.innerHTML = '';

    for (let i = 1; i <= t; i++) {
        const aVal = parseFloat(document.getElementById(`a${i}`).value) || 0;
        const bVal = parseFloat(document.getElementById(`b${i}`).value) || 0;
        const result = aVal - bVal; // ✅ 同样使用 'result',而非 'sub'

        o.innerHTML += `<input type="number" value="${result}" readonly style="background:#f0f0f0;">`;
    }
}

? 额外优化建议:

  • 使用 parseFloat() 替代 parseInt() 可支持小数运算;
  • 添加 || 0 防止空输入导致 NaN;
  • o.innerHTML = '' 比 o.textContent = '' 更合适,因需清空并重建 元素;
  • 输出字段设为 readonly 并添加浅灰背景,明确区分输入/输出区域;
  • 在 reg() 函数中,动态生成 input 时应统一使用 document.createElement + appendChild(避免内联 HTML XSS 风险),但当前场景下 innerHTML 可接受。

⚠️ 根本预防原则:
在 JavaScript 中,永远不要让变量名、函数名、DOM ID 或任何作用域内的标识符相互重名。命名应遵循 camelCase 规范并具备语义(如 matrixSumResult, operandAValue),这是写出可维护前端代码的第一道防线。

通过这次修复,您的矩阵计算器将稳定支持无限次加减运算——函数再也不会“跑丢”了。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

相关专题

更多
mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

17420

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1243

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

9390

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

3742

2025.08.07

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2418

2023.09.20

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

3580

2023.08.04

js函数function用法
js函数function用法

js函数function用法有:1、声明函数;2、调用函数;3、函数参数;4、函数返回值;5、匿名函数;6、函数作为参数;7、函数作用域;8、递归函数。本专题提供js函数function用法的相关文章内容,大家可以免费阅读。

594

2023.10.07

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

6541

2024.08.14

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

40

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.5万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn