以下は选择题:官方地址です http://perfectionkills.com/javascript-quiz/
1.
(function(){
引数の型を返す;
})();
「オブジェクト」
「配列」
「引数」
「未定義」
2.
var f = function g(){ return 23; };
g() の型;
「数値」
「未定義」
「関数」
エラー
3.
(function(x){
x を削除;
x を返す;
})(1);
1
null
未定義
エラー
4.
var y = 1、x = y = x のタイプ;
x;
1
「数値」
未定義
「未定義」
5.
(function f(f){
return typeof f();
})(function(){ return 1; });
「数値」
「未定義」
「関数」
エラー
6.
var foo = {
bar: function() { return this.baz; },
baz: 1
};
(function(){
引数の型を返す[0]();
})(foo.bar);
「未定義」
「オブジェクト」
「数値」
「関数」
7.
var foo = {
bar: function(){ return this.baz; },
baz: 1
}
typeof (f = foo.bar)();
「未定義」
「オブジェクト」
「数値」
「関数」
8.
var f = (function f(){ return "1"; }, function g(){ return 2; })();
f のタイプ;
「文字列」
「数値」
「関数」
「未定義」
9.
var x = 1;
if (function f(){}) {
x = typeof f;
}
x;
1
「1 関数」
「1 未定義」
NaN
10.
var x = [xのタイプ, yのタイプ][1];
x のタイプ;
「数値」
「文字列」
「未定義」
「オブジェクト」
11.
(function(foo){
foo.bar の型を返します;
})({ foo: { bar: 1 } });
「未定義」
「オブジェクト」
「数値」
エラー
12.
(関数 f(){
関数 f(){ return 1; }
return f();
function f(){ return 2; }
})();
エラー (例: 「再帰が多すぎる」)
未定義
13.
関数 f(){ return f;
新しい f() f のインスタンス;
真
偽
14.
(function(x, unknown){}) の長さ;
未定義
エラー
下は個人の解答:
// Q1
(function(){
return typeof argument; //明らかに、ここで返されるべきものは「オブジェクト」です
})();
var f = function g(){ return 23;
typeof g(); //ie では "number" が返されますが、ff ではエラーになります (g は定義されていません) )
// Q3
(function(x){
delete x; //ローカル変数は削除できないと言うべきです
return x; // したがって、ここでは 1 が返されます
} ) (1);
/*
ギフト:
delete と変数には次の関係があります:
1. オブジェクトの事前定義された属性は削除できません。2. プロトタイプで指定された属性は削除できません。削除されました delete の
// 2 については、オブジェクト インスタンスに動的に付加された属性のみを削除できることがわかりますか?
3. var で定義された変数 (個人的にはローカル変数と理解しています) は削除できません。 4. 関数で定義された変数とパラメータ (ローカル変数に相当) は削除できません。
削除の概要については、http://tech.idv2.com/2008/01/09/javascript-variables-and-delete-operator/
*/
// Q4
var y = 1, x = y = typeof x; //明らかに、x は未定義である必要があります
// Q5
(function f(f){
return typeof f( ); //ここでの f は渡される匿名関数を指すため、「数値」 (つまり 1)
})(function(){ return 1; });
var foo = {
bar: function() { return this.baz; },
//ただし、呼び出し後、this は bar を指し、bar には baz 属性がないため、未定義
baz: 1
};
(function(){
return typeof argument[0](); //arguments[0] は foo.bar
})(foo. bar );
// 問7
var foo = {
bar: function(){ return this.baz; }, //問6と同じ
baz: 1
}
typeof (f = foo.bar)();
// Q8
var f = (function f(){ return "1"; }, function g(){ return 2; })();
//js の符号演算子は 2 番目の関数と呼ばれるため、戻り値は "number" になります。
typeof f;
// Q9
var x = 1;
if (function f(){}) {
x = typeof f; //ie は 1function、ff は 1unknown
}
x;
// Q10
var x = [typeof x, typeof y][1]; //x="未定義"
typeof typeof x; //x は文字列なので、"string" でなければなりません
// Q11
(function( foo){
return typeof foo.bar;
//非常にわかりにくい質問ですが、パラメータ foo は渡された json オブジェクトを指し、json オブジェクトには foo 属性があります。
//したがって、ここで typeof foo.foo.bar であれば「number」になります
//ただし、パラメータ foo 自体は bar 属性を持たないので、「未定義」になります
})({ foo: { bar: 1 } });
// 第12問
(function f(){
function f(){ return 1; }
return f(); / / 関数定義、後者は前者をオーバーライドするので、 2
function f(){ return 2; }
})(); Q13
function f(){ return f ; }
new f()instanceof f;
//new f() は実際には f と同じであり、どちらも == なので false
//If function f(){ return 1;} とすると、返されるのは object
// Q14
with (function(x, unknown){}) length; と書くと分かります。次のようになります {}){length;}
//length は関数の仮パラメータの数を指すため、2