引数に「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>
<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
2
変数に値を入れてみる
2
第2引数に値を入れてみる
まず、関数が正常に動作している事を確認。
グローバルスコープのundefinedに値を代入すると関数1の値は不可能になり、
間違って引数指定をすると、undefinedに値が代入されて、関数2もアウト。
まぁ十分テストされていれば第2引数の指定はないだろうから危なくはないのかな?
思ったとおりの動きだったのでひとまず満足。
0 件のコメント:
コメントを投稿