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' が初期化されていない可能性があります。