JavaScript로 스크립트를 종료하는 방법은 무엇입니까?


149

PHP exit나 JavaScript와 같은 JavaScript 스크립트를 종료하려면 어떻게 die해야합니까? 나는 이것이 최선의 프로그래밍 관행이 아니라는 것을 알고 있지만 필요합니다.


1
이 요구 사항을 확장 할 수 있다고 생각하십니까? 정확히 왜 이것을 달성하려고합니까?
andynormancx

8
@andynormancx, 이것은 디버깅에 편리 할 수 ​​있습니다.
SET

3
단지 return;충분 귀하의 요구 사항에 따라 수 있습니다, 매개 변수없이 다이 ()와 같은 역할을합니다.
이시카와

2
"필요한"경우 디자인을 다시 생각하는 것이 좋습니다.
Frungi 2019

18
왜 항상 첫 번째 질문이 '왜'입니까?
john ktejik

답변:


80

PHP와 동등한 JavaScriptdie . BTW는 단지 호출합니다 exit()(splattne 덕분에).

function exit( status ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brettz9.blogspot.com)
    // +      input by: Paul
    // +   bugfixed by: Hyam Singer (http://www.impact-computing.com/)
    // +   improved by: Philip Peterson
    // +   bugfixed by: Brett Zamir (http://brettz9.blogspot.com)
    // %        note 1: Should be considered expirimental. Please comment on this function.
    // *     example 1: exit();
    // *     returns 1: null

    var i;

    if (typeof status === 'string') {
        alert(status);
    }

    window.addEventListener('error', function (e) {e.preventDefault();e.stopPropagation();}, false);

    var handlers = [
        'copy', 'cut', 'paste',
        'beforeunload', 'blur', 'change', 'click', 'contextmenu', 'dblclick', 'focus', 'keydown', 'keypress', 'keyup', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'resize', 'scroll',
        'DOMNodeInserted', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument', 'DOMNodeInsertedIntoDocument', 'DOMAttrModified', 'DOMCharacterDataModified', 'DOMElementNameChanged', 'DOMAttributeNameChanged', 'DOMActivate', 'DOMFocusIn', 'DOMFocusOut', 'online', 'offline', 'textInput',
        'abort', 'close', 'dragdrop', 'load', 'paint', 'reset', 'select', 'submit', 'unload'
    ];

    function stopPropagation (e) {
        e.stopPropagation();
        // e.preventDefault(); // Stop for the form controls, etc., too?
    }
    for (i=0; i < handlers.length; i++) {
        window.addEventListener(handlers[i], function (e) {stopPropagation(e);}, true);
    }

    if (window.stop) {
        window.stop();
    }

    throw '';
}

1
여기에 출구의 소스 코드는 다음과 같습니다 kevin.vanzonneveld.net/techblog/article/...
splattne의

이 코드는 요소의 이벤트 실행을 중지하는 것으로 보이지 않고 창 이벤트 만 나타냅니다. 따라서 페이지의 모든 요소를 ​​반복하여 비슷한 것을 수행해야합니다. 그러나 모든 것이 매우 이상한 요구 사항처럼 들립니다.
andynormancx

2
전체 다이 개념은 약간 깨졌습니다. 흐름은 그 reqire try-catch 여부와 상관없이 모든 이벤트를 처리 할 수 ​​있어야합니다.
annakata

"selectstart"이벤트와 같이 처리해야하는 모든 이벤트를 포함하지 않았다고 생각합니다.
Ono Oogami

4
XMLHttpRequest 핸들러를 중지 할 수 없습니다. 현재 코드는 간격 또는 시간 초과 실행을 중지하지 않습니다. 데모 : jsfiddle.net/skibulk/wdxrtvus/1이 문제를 해결 방법으로 고려할 수 있습니다. stackoverflow.com/a/8860203/6465140
skibulk

73

"종료"기능은 일반적으로 오류 메시지와 함께 프로그램 또는 스크립트를 매개 변수로 종료합니다. 예를 들어 PHP에서 die (...)

die("sorry my fault, didn't mean to but now I am in byte nirvana")

JS와 동등한 것은 다음과 같이 throw 키워드에 오류를 알리는 것입니다.

throw new Error();

이것을 쉽게 테스트 할 수 있습니다 :

var m = 100;
throw '';
var x = 100;

x
>>>undefined
m
>>>100

46
@Sydwell : catch 블록으로 둘러싸면 포착되어 프로그램이 종료되지 않으므로 여기에서 요점을 무시합니다.
궁극의

4
오류에 메시지를 추가 할 수 있다는 것을 잊지 마십시오 : throw new Error ( 'variable ='+ x); 작업하는 동안 스크립트를 빠르게 끝내고 변수의 가치를 얻는 좋은 방법입니다.
앤드류 스위프트

1
@ultimate 내가 필요할 때 #Sydwell이 깨끗 종료 b)는을 얻을 수 있도록), 가능한 예외 메시지를 시도 / 캐치에 전체 스크립트를 포장, 표준 생각 : 일반적으로 uncought 예외를 던지는 좋은 :)를 가져 오지 않습니다
jave.web을

47

핸들, 이벤트 등이없는 간단한 프로그램에서도 코드가 유일한 절차 인 경우에도 "메인"기능에 코드를 넣는 것이 가장 좋습니다.

<script> 
function main()
{
//code

}
main();
</script>

이 방법으로 프로그램을 멈추고 싶을 때 "return"을 사용할 수 있습니다.


15

오류인지 걱정하지 않으면 다음과 같이 작성하십시오.

fail;

그러면 기본 (전역) 코드가 진행되지 않습니다. 디버깅 / 테스트의 일부 측면에 유용합니다.


1
window.fail현재 브라우저에 정의되어 있지 않습니다.
mikemaccana

7
그게 요점입니다-당신도 할 수 있습니다 mikeyMouse;-오류가 종료됩니다. 빠르고 더러워 요.
Marc

1
아 공평 해-대답에 추가 할 수 있습니까?
mikemaccana

13

JS 또는 노드 스크립트를 종료하는 방법 에는 여러 가지 가 있습니다 . 가장 관련성이 높은 것은 다음과 같습니다.

// This will never exit!
setInterval((function() {  
    return;
}), 5000);

// This will exit after 5 seconds, with signal 1
setTimeout((function() {  
    return process.exit(1);
}), 5000);

// This will also exit after 5 seconds, and print its (killed) PID
setTimeout((function() {  
    return process.kill(process.pid);
}), 5000);

// This will also exit after 5 seconds and create a core dump.
setTimeout((function() {  
    return process.abort();
}), 5000);

REPL 에있는 경우 (예 : node명령 행에서 실행 한 후 ) 입력 .exit하여 종료 할 수 있습니다 .


나는 인터넷 검색의 첫 번째 결과로 나타나는 약어를 설명함으로써 독자의 지능을 모욕하고 싶지 않았습니다. 사용자가 해당 코드 블록을 복사 / 붙여 넣기하여 실행하면 ".exit"줄에 구문 오류가 발생하므로 JavaScript 코드와 REPL 명령을 함께 사용하지 않는 것이 좋습니다.
Dan Dascalescu

6

필자의 경우 window.stop브라우저에서 X 버튼을 클릭하는 것과 같은 API를 사용했습니다 .

window.stop();

5

장소 debugger;는 실행을 중지하려는 자바 스크립트 코드에 키워드를. 그런 다음 자주 사용하는 브라우저의 개발자 도구를 열고 페이지를 다시로드하십시오. 이제 자동으로 일시 중지됩니다. 도구 의 소스 섹션을여십시오. debugger;키워드가 강조 표시되고 스크립트 실행을 재개 할 수있는 옵션이 있습니다.

도움이 되길 바랍니다.

자세한 정보 :


2

이 질문에 대한 답변이 필요하다고 생각합니다 . 자세한 내용을 보려면 여기 를 클릭 하십시오 . 다음은 게시 된 짧은 답변입니다.

throw new Error("Stop script");

브라우저를 사용하여 중단 점을 추가 할 수도 있습니다. 모든 브라우저가 유사합니다. 브라우저에 대한 아래 정보를 확인하십시오.

Chrome 중단 점 정보는 여기
를 클릭 하십시오 . Firefox 중단 점 정보는 여기
를 클릭 하십시오 . 탐색기 중단 점 정보를 클릭하십시오
Safari 중단 점 정보를 클릭 하십시오


1

페이지에서 모든 Javascript의 실행을 강제로 종료하는 방법을 찾고 있다면 공식적으로 승인 된 방법이 있는지 확실하지 않습니다. 보안 위험이있을 수 있습니다. 솔직히 말해서, 나는 그것이 내 머리 위로 어떻게 떨어질지 생각할 수 없다.) 일반적으로 Javascript에서는 코드 실행을 중지하려는 경우 return어떤 기능을 실행하든 상관 없습니다. ( return함수는 함수의 마지막 항목이고 함수가 값을 반환하지 않으면 선택 사항입니다.) 반환이 충분하지 않은 이유가있는 경우 아마도 생각하는 이유에 대한 질문에 대한 세부 정보를 편집해야합니다 당신은 그것을 필요로 할 것이고 아마도 누군가가 대체 솔루션을 제공 할 수 있습니다.

실제로 대부분의 브라우저의 Javascript 인터프리터는 오류가 발생하면 현재 스크립트 실행을 중지합니다. 따라서 설정되지 않은 변수의 속성에 액세스하는 것과 같은 것을 할 수 있습니다.

function exit() {
    p.blah();
}

아마도 스크립트를 중단시킬 것 입니다 . 그러나 그것은 표준이 아니기 때문에 믿을 수는 없으며 실제로 끔찍한 연습처럼 보입니다.

편집 : 좋아, 아마도 이것은 Ólafur의 관점에서 그렇게 좋은 대답이 아니 었습니다. die()그가 링크 한 함수는 기본적으로 내 두 번째 단락을 구현 하지만 오류가 발생합니다.


1
모든 작업은 현재 실행중인 스크립팅 비트를 중지합니다. 새로운 이벤트가 발생하고 새로운 스크립트가 실행되는 것을 막지 않습니다.
andynormancx

말할 것도없이, 오류를 발생시키기 위해 여분의 나쁜 기능이 필요하지 않습니다. Javascript에는 기본 제공 throw 문이 있습니다.
Chris

die 함수는 p.blah ()보다 훨씬 많은 기능을 수행하며, windows 이벤트를 통해 실행되고 핸들을 "e.preventDefault (); e.stopPropagation ();"으로 대체하여 이벤트 발생을 중지합니다. 그런 다음 예외가 발생합니다.
andynormancx

1

던지기 "";

개념의 오용이지만 아마도 유일한 옵션 일 것입니다. 그리고 예, 허용 된 답변 언급과 같이 모든 이벤트 리스너를 재설정해야합니다. 내가 옳다면 단일 입국 지점이 필요할 것입니다.

그것의 상단에 : 당신은 던지는 즉시 이메일로 당신에게보고하는 페이지를 원합니다-예를 들어 Raven / Sentry를 사용할 수 있습니다. 그러나 그것은 당신이 자신에게 오탐을 만들어 낸다는 것을 의미합니다. 이 경우 기본 처리기를 업데이트하여 이러한 이벤트를 필터링하거나 Sentry의 대시 보드에서 무시할 때 해당 이벤트를 설정해야합니다.

window.stop ();

페이지를로드하는 동안에는 작동하지 않습니다. 페이지의 디코딩도 중지합니다. 따라서 실제로 자바 스크립트가없는 페이지 변형을 사용자에게 제공하는 데 사용할 수 없습니다.

디버거;

디버거가 열린 상태에서만 실행을 중지합니다. 훌륭하지만 효과는 없습니다.


1

JavaScript에는 여러 가지 방법이 있으며 그중 일부는 다음과 같습니다

방법 1 :

throw new Error("Something went badly wrong!");

방법 2 :

return;

방법 3 :

return false;

방법 4 :

new new

방법 5 :

위의 사용자 정의 함수 사용을 작성하고 필요한 곳을 호출하십시오.

참고 : 코드 실행을 일시 중지하려면 다음을 사용할 수 있습니다

debugger; 

0

이 작은 함수는 PHP의 exit ()를 흉내내는 것과 아주 비슷합니다. 다른 솔루션과 마찬가지로 다른 것을 추가하지 마십시오.

function exit(Msg)
    {
    Msg=Msg?'*** '+Msg:'';
    if (Msg) alert(Msg);
    throw new Error();
    } // exit

0

복잡한 코드가 필요없는 BOOL 조건을 작성하기 만하면됩니다.

한 번만 true / 또는 여러 번 설정하면 둘 다 한 줄의 솔루션을 제공하거나 여러 개가 아닌 기본적으로 간단합니다.


0

스크립트에서 정의되지 않은 함수를 사용하면 "Uncaught ReferenceError"로 인해 스크립트가 중지됩니다. 나는 다음 코드를 시도하고 처음 두 줄을 실행했습니다.

이것이 스크립트를 중지시키는 가장 좋은 방법이라고 생각합니다. 다른 방법이 있다면 저에게 의견을 말하십시오. 또한 다른 가장 좋고 간단한 방법을 알고 싶습니다. BTW, 스크립트 종료를 위해 PHP와 같은 Javascript에서 종료 또는 내장 기능을 얻지 못했습니다. 누구든지 알고 있다면 알려주십시오.

alert('Hello');

document.write('Hello User!!!');

die();  //Uncaught ReferenceError: die is not defined

alert('bye');

document.write('Bye User!!!');

0

오류를 "throw"하지 않고 추가 코드가 실행되지 않게하려면 다음 window.onerror과 같이 일시적으로 재정의 할 수 있습니다 cross-exit.

function exit(code) {
    const prevOnError = window.onerror
    window.onerror = () => {
        window.onerror = prevOnError
        return true
    }

    throw new Error(`Script termination with code ${code || 0}.`)
}

console.log("This message is logged.");
exit();
console.log("This message isn't logged.");

0

나는 iobroker를 사용하고 있으며 쉽게 스크립트를 중지 할 수 있습니다.

stopScript();

0

대부분의 상황에 해당되지는 않지만 브라우저에서 많은 비동기 스크립트를 실행하고 있으며 해킹으로 사용합니다.

window.reload();

모든 것을 멈추기 위해.


0

나는 이것이 오래되었다는 것을 알고 있지만 비슷한 PHP die()기능 을 원한다면 할 수 있습니다 :

function die(reason) {
    throw new Error(reason);
}

용법:

console.log("Hello");
die("Exiting script..."); // Kills script right here
console.log("World!");

위의 예는 "Hello"만 인쇄합니다.


-1

이 코드를 사용하여 실행을 중지합니다.

throw new FatalError("!! Stop JS !!");

콘솔 오류가 발생하지만 나에게 효과적입니다.


-2

이것은 조건이 존재하는 경우 스크립트를 종료하는 예입니다. SSE 클라이언트 측 자바 스크립트에서 이것을 사용합니다.

<script src="sse-clint.js" host="https://sse.host" query='["q1,"q2"]' ></script>

캐논은 JSON 구문 분석에서 바로 구문 분석됩니다 ...

if( ! SSE_HOST  ) throw new Error(['[!] SSE.js: ERR_NOHOST - finished !']);

어쨌든 일반적인 아이디어는 다음과 같습니다.

if( error==true) throw new Error([ 'You have This error' ,  'At this file', 'At this line'  ]);

이것은 javasript 스크립트를 종료 / 죽입니다.


1
이것은 실제로 질문에 대답하지 않습니다. 그들은 일반적인 문제에 대해 이야기하고 있으며 특정 SSE 변수 / 파일과 관련이 없습니다.
mjk

1
mjk 더 나은 지금?
kapad

-3

throw는 콘솔에서 오류를 발생시키기 때문에 throw 대신 return 문을 사용합니다. 가장 좋은 방법은 상태를 확인하는 것입니다

if(condition){
 return //whatever you want to return
}

콘솔에서 오류를 발생시키지 않고 해당 행에서 프로그램 실행을 중지합니다.


1
그러나 그것은 "함수 밖에서 '반환'을 사용할 수 없습니다"와 같은 린터의 오류를 제공합니다
Carles Alcolea

명령문이 유효하지 않기 때문에 실행을 중지합니다. if (condition) { new new }또는 을 사용할 수도 있습니다 if (condition) { purpleMonkeyDishwasher(); }.
Coderer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.