javascriptで現在実行中のファイル名及び行番号を取得する方法

qiitaにも書いたけど、こっちにも載せておく。

Object.defineProperty(window, '__STACK__', {
get: function(){
var orig = Error.prepareStackTrace;
Error.prepareStackTrace = function(_, stack){ return stack; };
var err = new Error;
Error.captureStackTrace(err, arguments.callee);
var stack = err.stack;
Error.prepareStackTrace = orig;
return stack;
}
});
Object.defineProperty(window, '__FILE__', {
get: function(){
let filename = __STACK__[1].getFileName().replace(location.origin, "").replace(window.location.search, "");
if(!filename) filename = "/";
return filename;
}
});
Object.defineProperty(window, '__LINE__', {
get: function(){
return __STACK__[1].getLineNumber();
}
});
Object.defineProperty(window, '__HERE__', {
get: function(){
let filename = __STACK__[1].getFileName().replace(location.origin, "").replace(window.location.search, "");
if(!filename) filename = "/";
return filename + ":" + __STACK__[1].getLineNumber();
}
});
console.log("__FILE__", __FILE__);
console.log("__LINE__", __LINE__);
console.log("__HERE__", __HERE__);

なぜJavascriptはシングルスレッドかつ非同期通信なのか

http://indori.blog32.fc2.com/blog-entry-1298.html
同じ理由でJavascriptもシングルスレッドなのだと思う。

シングルスレッドだとファイルの読み込みなどの重い処理をしたときに次の処理まで長い待ち時間が発生しうる。
それだと使い者にならないので、そのような処理は処理を投げる(ファイル読み込みの場合はhttpリクエストをブラウザに投げる)ことだけをまず行い、イベントループにでぶち込んで他の処理を行う(他の処理も同じようにイベントループにぶちこむ)。

イベントループを監視してる最中に、その処理が終わっていたらFIFOでコールバック関数を実行する。
これが現実的な解決方法であり、非同期処理そのものだ。

海外旅行の際に空港でやるべきこと

前提
以下が終わるまで、出たら戻れないゲートからは出ない。出ると戻れなくなり、最悪ロンドン中央部までそのまま行かなければならなくなる。ゲートを出るのは「出なければ下記2つが行えない」と判明した場合のみ。

1.クレジットカードを使い、ATMで外貨(ポンド)を降ろす
クレジットカードのキャッシングを使えば、かなりいいレートでJPY/GBR(円/ポンド)変換できる。キャッシングは帰国したらクレジットカード会社に電話して繰り上げ払いすれば利息も3%(年利18%として1ヶ月分)しかかからない。これはほとんどの外貨交換所よりお得な計算である。
クレジットカードとATMの相性が悪く、使えない場合もあるので、クレジットカードは複数枚持っていくこと。(ほとんどは使えるが、3枚中2枚使えないということが1度だけあった
 英語での質問方法:Where is an ATM? / Where can I use an ATM? / Could you mind if you tell me where an ATM is? (かなり丁寧)

2.SIMカードを買う
前提として、携帯のSIMロックを解除しておくこと。海外旅行に行く前にはこれが必須。ほとんどの空港の到着場所には、短期滞在者用のSIMカードが売ってることが多く、これはイギリスもおそらく存在する(参考:https://scratchpad.jp/prepaid-sim-in-uk-2/ 注:情報が古いので今これがまだ正しいかは不明)。日本のキャリアの海外ローミングは極めて値段が高く、不便なことが多い。多少値が張ってもSIMを現地で買うべきである。個人的には、例えばロンドンで1週間程度滞在するのなら、5000円でも購入すべきだと思う(物価が高いので)。
SIMがないと、あらゆる点で困る。地図も調べられないし、安い交通機関もわからない。最近はネットで調べる人が多いのか、ガイドサービスも充実してない国が多い。英語がとても流暢ならいいが、そうでない場合はウザがられることもしばしば。ひどいときはタクシーなどでぼったくられる。SIM代をケチると、ストレスが溜まり、結局費用もかかるので、百害あって一利なし。
英語での質問方法:Where can I buy a SIM card for a mobile phone? / Could you mind if you tell me where a SIM card for a mobile phone is? (かなり丁寧)