>  기사  >  웹 프론트엔드  >  자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요

자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요

WBOY
WBOY원래의
2016-05-16 19:17:451481검색

今天有个哥们问我要是JavaScript函数重名了会有什么后果?开始我没有细想,就说可能会出错吧,可是等我实验完了发现页面没有任何脚本错误提示,而且程序也运行了,只是对同名函数的调用执行了位置靠后的一个。

    回头仔细一想,这个结果完全可以接受,因为脚本在页面里本身就是顺序执行下来的,包括函数的定义,但然如果只是定义 function foo(){} 这种形式,我们是跟踪不到函数初始化的。可是如果是定义类的方式,我们就可以明显地跟踪到函数的初始化顺序。比如:

자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요function foo() {}
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요
function foo.prototype.fn1() {}
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요
function foo.prototype.fn2() {}

    我们就可以明显地看到先执行function foo.prototype.fn1(){}再执行function foo.prototype.fn2(){}。

    回到我们刚才说的JavaScript脚本函数重名问题上来,比如我们定义两个函数 funAlert():

자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요function funAlert()
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요{
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요    alert('A');
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요}
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요
function funAlert()
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요{
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요    alert('B');
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요}

    调用 funAlert(),那么将显示一个MegBox,内容为'B'。

    为什么初始化函数会有这样的效果?这里只用把上面两个函数的定义改一下,就会一目了然了,我们把定义改为:

자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요var fnAlert = new Function("alert('A')");
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요
var fnAlert = new Function("alert('B')");
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요window.fnAlert();
    其函数也就是定义在对象上的一个函数指针,我们象这个指针赋什么函数引用,它就执行什么效果,而JavaScript中的脚本函数重名就和普通赋值语句一样,等同于:
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요var i = 0;
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요
var i = 1;
    // 稍微注意以下JavaScript里的var,用var定义变量和我们平时用的高级语言定义变量是不同的,它只起到一个提示的作用,提醒说我在这里定义变量了,而没有什么变量作用域的概念,只要不离开定义它的对象的域(比如页面刷新),出现过的变量会就一直存在。所以var写不写都行。举个例子:
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요if ( true )
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요{
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요   t 
= 100;
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요}
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요alert(t);

에는 100이 표시되고

에는 100이 표시됩니다.
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요만약 ( )
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요{
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요
var t = 100;
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요}
자바스크립트 함수_javascript 팁의 중복된 이름에서 초기화 방법을 살펴보세요alert( t);

100도 표시됩니다.

그래서 자바스크립트 스크립트 함수 이름이 반복되는지 여부는 단지 연산의 문제일 뿐이고, 이는 우리 고급 언어의 문법적 제약과 전혀 다르며, 물론 오버로드의 범주도 아닙니다.

스크립트 함수 이름이 같으면 무슨 소용이 있나요? 가장 직관적인 점은 의사 오버로딩 을 구현하는 데 사용할 수 있다는 것입니다. 예를 들어, 많은 무료 홈페이지 공간은 종종 팝업 창 광고를 표시합니다. 페이지의 첫 번째 줄.

<스크립트 언어="javascript">
 var _open = window.open; window.open 
= 함수() {}
스크립트 >
이렇게 하면 페이지 첫 줄에 추가되지 않은 팝업창 광고를 차단할 수 있습니다. (첫 줄에 추가하는 것은 차단할 수 없습니다.) window.open이 '오버로드'되기 전에 실행되기 때문입니다).
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.