今天有个哥们问我要是JavaScript函数重名了会有什么后果?开始我没有细想,就说可能会出错吧,可是等我实验完了发现页面没有任何脚本错误提示,而且程序也运行了,只是对同名函数的调用执行了位置靠后的一个。
回头仔细一想,这个结果完全可以接受,因为脚本在页面里本身就是顺序执行下来的,包括函数的定义,但然如果只是定义 function foo(){} 这种形式,我们是跟踪不到函数初始化的。可是如果是定义类的方式,我们就可以明显地跟踪到函数的初始化顺序。比如:
我们就可以明显地看到先执行function foo.prototype.fn1(){}再执行function foo.prototype.fn2(){}。
回到我们刚才说的JavaScript脚本函数重名问题上来,比如我们定义两个函数 funAlert():
调用 funAlert(),那么将显示一个MegBox,内容为'B'。
为什么初始化函数会有这样的效果?这里只用把上面两个函数的定义改一下,就会一目了然了,我们把定义改为:
에는 100이 표시되고
에는 100이 표시됩니다.100도 표시됩니다.
그래서 자바스크립트 스크립트 함수 이름이 반복되는지 여부는 단지 연산의 문제일 뿐이고, 이는 우리 고급 언어의 문법적 제약과 전혀 다르며, 물론 오버로드의 범주도 아닙니다.
스크립트 함수 이름이 같으면 무슨 소용이 있나요? 가장 직관적인 점은 의사 오버로딩 을 구현하는 데 사용할 수 있다는 것입니다. 예를 들어, 많은 무료 홈페이지 공간은 종종 팝업 창 광고를 표시합니다. 페이지의 첫 번째 줄.