switch statement, the integer constant associated with each case label must be unique. There may or may not be a default statement. There is no restriction on the order of the labels within a switch. The requirement that case labels values evaluate to integer constants gives the compiler more room for optimizations. Examples Javascript In JavaScript language syntax statements may be preceded by the label: top: //Label the outermost for-loop. for (var i = 0; i < 4; i++) { for (var j = 0; j < 4; j++) { if (j === 3 && i === 2) { alert("i=" + i + ", j=" + j); //i=2, j=3 break top; } } } alert("i=" + i + ", j=" + j); //i=2, j=3 It also possible to use break statement to break out of the code blocks: top: { console.log("foo") console.log("bar") break top console.log("baz") } // Which would output: // > foo // > bar Common Lisp In Common Lisp two ways of defining labels exist. The first one involves the tagbody special operator. Distinguishing its usage from many other programming languages that permit global navigation, such as C, the labels are only accessible in the context of this operator. Inside of a tagbody labels are defined as forms starting with a symbol; the go special form permits a transfer of control between these labels. (let ((iteration NIL)) (tagbody start (print 'started) (setf iteration 0) increase (print iteration) (incf iteration 1) (go check) check (if (>= iteration 10) (go end) (go increase)) end (print 'done))) A second method utilizes the reader macros #n= and #n#, the former of which labels the object immediately following it, the latter refers to its evaluated value. Labels in this sense constitute rather an alternative to variables, with #n= declaring and initializing a “variable” and #n# accessing it. The placeholder n designates a chosen unsigned decimal integer identifying the label. (progn #1="hello" (print #1#)) Apart from that, some forms permit or mandate the declaration of a label for later referral, including the special form block which prescribes a naming, and the loop macro that can be identified by a named clause. Immediate departure from a named form is possible by using the return-from special operator. (block myblock (loop for iteration from 0 do (if (>= iteration 10) (return-from myblock 'done) (print iteration)))) (loop named myloop for iteration from 0 do (if (>= iteration 10)