引数に「undefined」って指定してあるのなんで?と言っていた人がいた。
jQueryの話だったけど、JavaScriptの癖(癌)を利用したトリックだと推測。
undefinedはグローバルスコープの変数だから、
引数に対してundefinedを代入して、ローカルスコープに持って来て
ロジックによっては処理を早くしたり、
undefinedの値をローカル内で保証できる状況になるという仮説を立てたけど、
「引数間違って指定したら失敗するんじゃね?」
と思ったので試してみた。
<script type="text/javascript">
<!--
function undefinedTest1(arg1) {
if ( arg1 === undefined ) {
console.log("1");
}
}
function undefinedTest2(arg1,undefined) {
if ( arg1 === undefined ) {
console.log("2");
}
}
var val;
console.log("undefined");
undefinedTest1(val);
undefinedTest2(val);
console.log("変数に値を入れてみる");
undefined = true;
undefinedTest1(val);
undefinedTest2(val);
console.log("第2引数に値を入れてみる");
undefinedTest2(val,"test");
// -->
</script>
でコンソールは
undefined
1
2
変数に値を入れてみる
2
第2引数に値を入れてみる
まず、関数が正常に動作している事を確認。
グローバルスコープのundefinedに値を代入すると関数1の値は不可能になり、
間違って引数指定をすると、undefinedに値が代入されて、関数2もアウト。
まぁ十分テストされていれば第2引数の指定はないだろうから危なくはないのかな?
思ったとおりの動きだったのでひとまず満足。
0 件のコメント:
コメントを投稿