JavaScript

JavaScriptのstrict(厳格)モードと非strictモードで関数の実行結果を試してみる【use strict】

JavaScriptのuse strict(厳格モード)とは、コードの品質を向上させ、エラーを未然に防ぐために使用するオプションです。
このモードを使うと、コードの不適切な記述が許されず、厳格なチェックが行われます。例えば、変数を宣言せずに使用するとエラーが発生し、JavaScriptの実行を妨げます。
今回は、「strictモード」と「非strictモード」の違いを、いくつかの具体例を通して説明します。

use strictとは?

use strictはECMAScript 5で導入されたオプションで、JavaScriptの柔軟さが時に引き起こすバグを回避するための仕組みです。このモードを使うことで、以下のような不具合を防ぐことができます。

  1. 変数宣言の強制
    varやletを使わない変数宣言がエラーになる。
  2. 重複プロパティの禁止
    同じ名前のプロパティを持つオブジェクトがエラーになる。
  3. 予約語の使用制限
    将来のバージョンで予約語として使われる単語(classやenumなど)を変数名に使えない。

これにより、コードがより予測可能で、エラーが発見しやすくなります。

JavaScript処理を実行するボタンのスタイルとHTML記述

CSS記述

まずは、クリックボタンのCSSスタイルを見てみましょう。このボタンはクリックされると、JavaScriptのstrictモードまたは非strictモードで関数が実行されます。

<style type="text/css">
body{
  font-family:Verdana,"Hiragino Kaku Gothic Pro","ヒラギノ角ゴ Pro W6",Osaka,"MS Pゴシック",Arial,sans-serif;
  padding: 0;
  margin: 0;
  overflow-x: hidden;
  line-height: 1.8em;
  text-align: center;
}
h1{
  font-size:26px;
  text-align:center;
  font-weight:normal;
  padding:10px 0 20px 0;
  line-height: 1.4em;
}
.clk{
  width: 500px;
  margin: 0 auto 20px auto;
  background-color: #cccccc;
  font-weight: bold;
  text-align: center;
  line-height: 1.7em;
  cursor: pointer;
  font-size:14px;
  padding:8px;
}
.clk span{
  font-size: 20px;
  font-weight: bold;
}
</style>

HTML記述

以下は、ボタンのHTMLコードです。各ボタンはクリックされると、それぞれ異なる関数を実行します。
クリックボタン(class=”clk”)はonclickでfunc1()、func2()、func3()関数を実行します。

<h1>以下をクリックするとstrict(厳格)モードと非strictモードでエラーとなって関数の実行できない場合と、<br>エラーにならず関数の実行可能な場合を試せます。</h1>
<br>

<div class="clk" onclick="func1()"><span>ここをクリック</span><br>関数func1(strictモード:変数宣言無し)を実行=変数宣言無しのため実行されず、JavaScriptエラーになる</div>

<div class="clk" onclick="func2()"><span>ここをクリック</span><br>関数func2(非strictモード:変数宣言無し)を実行=変数宣言無しだが、非strictモードのため実行される</div>

<div class="clk" onclick="func3()"><span>ここをクリック</span><br>関数func3(strictモード:変数宣言有り)を実行=変数宣言有りなので、strictモードで実行される</div>

JavaScriptによる関数の実行とエラーハンドリング

関数定義と実行

次に、それぞれの関数でstrictモードが適用された場合とされない場合の動作を確認します。

<script type="text/javascript">
function func1(){
"use strict";
  x1 = 5;
  y1 = 7
  alert(x1 + y1);
}

function func2(){
  x2 = 5;
  y2 = 7;
  alert(x2 + y2);
}

function func3(){
"use strict";
  var x3 = 5;
  var y3 = 7
  alert(x3 + y3);
}
</script>
  • func1()
    この関数はstrictモードが有効で、変数宣言なしでx1を使おうとするためエラーが発生します。
  • func2()
    この関数は非strictモードで実行されるため、変数宣言なしでもエラーは発生せず、正常に計算結果が表示されます。
  • func3()
    strictモードで実行されますが、変数は適切に宣言されているため、エラーなく動作します。

上記3パターンの関数を記述してます。

【use strict】strict(厳格)モードと非strictモードで関数の実行結果を試すデページ

以下のデモページでは、厳格モードと非厳格モードで関数がどのように動作するかを試すことができます。
特に、プラグインを使用する際は、strictモードが影響する可能性があるため注意が必要です。モードは全体ではなく、関数単位で適用することを推奨します。

【use strict】strict(厳格)モードと非strictモードで関数の実行結果を試すデモ

まとめ

JavaScriptのuse strictモードは、コードの品質を高め、意図しないバグを防ぐために非常に有効です。以下のようなメリットがあります。

  • コードの予測可能性が向上する
  • バグの発生を未然に防ぐ
  • 大規模なプロジェクトでのコードの一貫性を確保する

一方で、すべてのコードに対して無条件で適用するのは避け、プラグインや外部スクリプトとの互換性を考慮しながら、適切に使い分けることが重要です。

このように、strictモードと非strictモードの違いを理解することで、JavaScriptのコードを書く際のトラブルを減らし、より効率的な開発が可能になります。

 
※流用される場合は自己責任でお願いします。
 デモページheadタグ内のGoogleアナリティクスタグは流用しないで下さい。