標題\分類 | JS | PHP |
---|---|---|
作用 | 打斷迴圈、作用區 | 打斷迴圈、作用區 |
對象 | for、forEach、while、do...while、switch、label | for、foreach、while、do...while、switch |
可選參數 | label 值 | 數字 |
參數作用 | 打斷 / 跳出該label作用區 (須將 break 放在 label 宣告區域中) | 指定要打斷 / 跳脫幾重迴圈 |
走在職業的道路上總是有很多迷惘。 不後悔曾經的自己選擇了前端這條路,即使前方佈滿了荊棘。 因此想要留下點什麼,也可以記錄下在這條路上的種種。 或許在未來的某個時間點,可以以另一種眼光看待這曾經的當下。
2019-09-23
第11屆鐵人賽 ✧ Day 6:Break and Go Next
## 前言
之前講了一些有關迴圈的內容,今天要來討論的,就是如何中斷、跳脫正在運行中的迴圈。
這次要看的是 `break`,`break` 的做用就跟他的名字一樣,用於中斷執行序、跳出迴圈或是作用區。
---
## Break
### Javascript
在 JS 中,它能作用的對象有以下數種:
1. for
2. forEach
3. while
4. do...while
5. switch
6. label
前四個是迴圈系列,沒什麼需要特別說明的,所以先看另外兩個。
`switch` 其實並不屬於迴圈家族的一份子,但是因為它的語法概念是**進入點**,所以會需要有語句去告訴它說:「_親,做到這邊就好了喲!_」,於是便運用上了 `break` 的特性。
`label` 有點像是**語法標籤**或是**便利貼**的概念,感覺就是把一段程式碼,特別幫它取一個名字,方便進行便操作。因為 `break` 的特性需要被放置迴圈中才能起作用,所以感覺上,`label` 就是為了讓 `break` 可以用在迴圈外的地方而存在的。
在迴圈中使用 `break` 大概是這樣子:
```javascript
// javascript
for (let i = 0; i < 10; i++) {
if (i === 3) {
break;
}
console.log(i);
}
console.log("end");
// > 0
// > 1
// > 2
// > end
```
它會中斷 / 跳脫迴圈的執行,之後進行後續的語法。
以 JS 來說,基本上它只能跳過一層,所以是多重迴圈的情況下,就會繼續執行外部的迴圈內容:
```javascript
// javascript
let i = 0;
let k = 0;
for (; i < 10; i++) {
for (; k < 5; k++) {
if (k === 3) {
console.log(`k end`);
break;
}
console.log(`k = ${k}`);
}
console.log(`i = ${i}`);
}
console.log(`i end`);
// > k = 0
// > k = 1
// > k = 2
// > k end
// > i = 0
// > k end
// > i = 1
// > k end
// > i = 2
// > k end
// > i = 3
// > k end
// > i = 4
// > k end
// > i = 5
// > k end
// > i = 6
// > k end
// > i = 7
// > k end
// > i = 8
// > k end
// > i = 9
// > i end
```
從上面的結果可以看出來,在 `break` 執行之後,雖然不會再運行 _k_ 的內容,但是外層跟 _i_ 相關的並不受影響。
可是 `label` 的運行就有點不一樣了,因為對 `label` 來說,你已經有給它命名了,所以你要中斷哪一個就中斷哪一個。
不過要記得,必須把 `break` 放在 `label` 的作用域裡面才有效。
```javascript
// javascript
// 單層 label
helloStr: {
console.log("Hello");
break helloStr;
console.log("the Happy");
}
console.log("World");
// > Hello
// > World
```
```javascript
// javascript
// 多層 label
var i = 0,
j = 8;
checkiandj: while (i < 4) {
console.log("i: " + i);
i += 1;
checkj: while (j > 4) {
console.log("j: " + j);
j -= 1;
if (j % 2 == 0) break checkiandj;
console.log(j + " is odd.");
}
console.log("i = " + i);
console.log("j = " + j);
}
// > i: 0
// > j: 8
// > 7 is odd.
// > j: 7
```
### PHP
PHP 中 `break` 的概念其實跟 JS 中差不多,不過它沒有 `label` 可以用。
所以它的可選參數接的是純數字,用來表示它中斷 / 跳脫幾重迴圈。(由內到外,自身為 1)
```php
// php
// 單層迴圈
<?
$i = 0;
while ($i < 10) {
if($i == 5) {
break;
}
echo $i;
$i++;
}
?>
// > 0
// > 1
// > 2
// > 3
// > 4
```
```php
// php
// 多重迴圈
<?
$i = 0;
$k = 8;
for (; $i < 10; $i++) {
while ($k > 0) {
if($k == 5) {
break 2;
}
echo "k:" . $k;
$k--;
}
echo "i:" . $i;
}
// > k:8
// > k:7
// > k:6
?>
```
---
## 比較
---
## 參考資料
- [http://docs.php.net/](http://docs.php.net/)
- [https://developer.mozilla.org/zh-TW/](https://developer.mozilla.org/zh-TW/)
- [https://www.w3schools.com/](https://www.w3schools.com/)