문제

예를 들어 다음과 같은 코드를 실행하는 경우 jQuery 프레임 워크를 취하십시오.

$(document).ready(function init() { foo.bar(); });

Firebug에서 얻는 스택 추적은 다음과 같습니다.

init()
anonymous()
anonymous([function(), init(), function(), 4 more...], function(), Object name=args)
anonymous()
anonymous()

보시다시피, 각 함수를 클릭하여 그것이 무엇인지 알아 내야하기 때문에 읽을 수 없습니다. 익명의 기능도 다음과 같이 나타납니다 (?)() 프로파일 러에서는 "최적화 된 폐쇄에 액세스 할 수 없습니다"버그. 이것이 피해야 할 좋은 이유 인 것 같습니다. 그러면 ECMAScript 5가 감가 상징이 될 것이라는 사실이 있습니다. arguments.callee 엄격한 모드에서는 익명의 기능을 참조 할 수 없으므로 미래를 약간 덜 방지 할 수 없습니다.

반면에 이름 지정된 기능을 사용하여 반복으로 이어질 수 있습니다.

var Foo = {
    bar: function bar() {}
}

function Foo() {}

Foo.prototype.bar = function bar() {}

이 반복이 기능이 제공하는 디버깅 편의성에 비추어 정당하다고 생각하는 것은 옳고 jQuery와 같은 좋은 프레임 워크에서 익명 기능의 유병률이 감독 하는가?

도움이 되었습니까?

해결책 2

나는 이것에서 내 질문에 대한 답을 찾았다 매우 유익한 기사. 첫째, 지명 된 기능이 더 바람직하다는 것이 옳았지만 솔루션은 모든 익명 기능에 식별자를 추가하는 것만 큼 간단하지 않습니다. 이것의 주된 이유는 JScript 기능 표현식을 매우 깨진 방식으로 구현하기 때문입니다.

둘째, 함수 문과 표현 사이에는 차이가 있습니다. 익명 함수는 식별자가 생략 된 함수 표현 일 뿐이며 식별자를 추가하는 (이름 지정)는 문자가되지 않습니다 (jscript를 제외하고는 제외). 이것은 다른 모든 답변이 마크에서 벗어 났음을 의미합니다.

다른 팁

JavaScript/emcaScript에서 익명 메소드를 사용하는 데 필요한 단점이 있다는 데 동의합니다. 그러나 어떻게 사용되어야하는지 간과하지 마십시오. 다른 기능으로 전달하려는 간단한 하나의 라이너의 경우 종종 우수합니다.

그러나 나에게 익명의 함수는 소스 코드에서 더 읽을 수 있습니다.

익명의 기능은 매우 편리합니다. 이 문제에 대한 더 나은 수정은 기능을 명명하는 대신 FireBug가 어떤 파일이 어떤 파일을 생성했는지에 대해 말한 경우입니다.

init()
anonymous() // application.js, line 54
anonymous() // foo.js, line 2

그리고 스택 추적은 익명 기능이 문제가되는 유일한 장소입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top