jsc.exeのエラー解除方法:「error JS1187: 変数 '_this' が初期化されていない可能性があります。」

jsc.exeでJavaScriptを静的ビルドしてテストしている際に、実行に影響がないにもかかわらず出力されるエラーの解除方法が見つかったため、記載する。

原因とエラー解除方法

原因は、正確にはわかっていないが、三項演算子の条件が偽ルートに、問題の変数を使用すると発生するようになる。そのため、上記の条件を満たさないようにコーディングすればエラー出力しなくなる。

[補足]
上記の条件を満たすと必ず発生するわけではなく、条件を満たすと問題が発生する可能性がでてくるだけである。そのため、やはり根本原因はわかっていないことになる。

エラー解除の例

test.js修正例function main() {
  var msg = 'test';
  if (!false) { msg = _this.msg; }
  _this.print(msg);
}    

問題発生の例:ソース

test.js(function() {
  "use strict";

  var _this = {};
  _this.msg = 'Hello World.';

  _this.print = function (msg) {
    WScript.Echo(msg);
  }

  function main() {
    var msg = (false)? 'test': _this.msg;
    _this.print(msg);
  }

  main();
})();

問題発生の例:jsc.exeの実行結果

jsc.exe実行結果C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/jsc.exe  /fast- /warnaserror test.js
Microsoft(R) JScript Compiler version 8.00.50727
for Microsoft(R) .NET Framework version 2.0.50727
Copyright (C) Microsoft Corporation 1996-2005. All rights reserved.

test.js(2,3) : error JS1169: 式は実行されません。
test.js(8,5) : error JS1135: 変数 'WScript' が宣言されていません。
test.js(14,5) : error JS1187: 変数 '_this' が初期化されていない可能性があります。