面向过程的代码请不要拆分成多个脚本

在一次前端开发过程中本人发现一个函数死活就是没有执行,我在里面打点、输出,都呈现未执行的结果。本人在确定这个函数内部代码以及外部调用的方式完全正确(排除this的问题)之后,自己直接拷贝了一份并改了一下这个代码的名称再区调用,这时候它总算是执行了。这就很令人纳闷——之前的不能被执行,该了个函数名就能够被执行了,这是为什么呢?


我还原到原来的代码,利用IDE提供的便利点击F12跳转到那个改名之前的“未被执行的函数”的具体实现,发现跳转过去的完全不是A.js这个脚本中的那个实现,而是B.js脚本中的那个实现!到此,所有的迷惑终于得到解答!


值得注意的是,A.js和B.js虽是不同的脚本但他们是同时被加载在页面当中去的,因此会出现内部函数在调用的时候因为异步而产生的无序性,加之当两个脚本中具有同名同参的函数时,js更不清楚到底要执行哪一个,会出现错乱,导致让我们感觉很正常的代码实际上是有很大的错误的。最好的方式是面向对象的解决思路,比较笨的方法是直接将这两个脚本中出现重名的函数名改一下即可。将一个面向过程的长脚本拆开并不是面向对象,更不是去耦合,有时候(像这种场景)是为自己以及后面的开发人员添加了不必要的维护难度——两个函数重名、内部实现方式分别两样,但他们所依附的两个脚本实际上是同时加载,导致函数重新定义,这个问题往往会在开发过程中因“不同脚本”+“不同函数实现”而遭到忽视。




作者:艾孜尔江·艾尔斯兰
转载或使用请务必标明出处!

原文地址:https://www.cnblogs.com/ezhar/p/13681232.html