じゃあ this の抜き打ちテストやるぞー

[JavaScriptのthisの覚え方](http://qiita.com/items/74005adacc0e8e2a3cab) や [JavaScriptの「this」は「４つ」だけ！](http://qiita.com/items/9935ce476a17d6258e27)の授業でやったから、this はみんなばっちりだよな。じゃあ今から抜き打ちテストするぞー。まだ読んでないひとは先に上の記事を読んどくといいと思うけど、腕に自信のある人はすぐに回答を始めても構わないぞ。赤点とった奴は、今日の放課後[補習](http://qiita.com/items/d249a2f2f13532748324)だからなー。

**【注意】 問題 18 ～20 について、[カンマ演算子](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Comma_Operator) を知らないから解けなかった、という人が結構いるみたいです。本問はカンマ演算子の知識を問うものではなく、あくまで this の振る舞いについての理解を試すものなので、本来の題意を損なわないように当該の問題は改題しました。改題後も正答とその根拠は変わりません。**

| 得点       | 評価                                   |
|:-----------|:---------------------------------------|
|  0 ～  5   | テスト中に寝るんじゃない               |
|  6 ～ 11   | 鉛筆転がしのほうがマシ |
| 12 ～ 15   | 平凡な一般市民         |
| 16 ～ 19   | 10 人に一人の逸材      |
| 20 ～ 21   | this の世界的権威    |
| 22         | あなたが神か           |

# 問 以下の JavaScript プログラムをウェブブラウザ上で実行したとき、`true` が出力されるものには ○ 、そうでないものには × をつけよ。（各１点）

## 1

```js
console.log(this === window);
```

[答え](http://jsfiddle.net/7xFnS/)

## 2

```js
'use strict';
console.log(this === window);
```

[答え](http://jsfiddle.net/V2h8K/1/)

## 3

```js
function hoge(){
    console.log(this === window);
}

hoge();
```

[答え](http://jsfiddle.net/mEneJ/1/)

## 4

```js
var piyo = { 
    hoge: function(){
        console.log(this === window);
    } 
};

piyo.hoge();
```

[答え](http://jsfiddle.net/rPtQ2/)

## 5

```js
function Hoge(){
    console.log(this === window);
}    

new Hoge();
```

[答え](http://jsfiddle.net/6Lyaw/1/)

## 6

```js
var hoge = {
    Hoge: function(){
        console.log(this === window);
    }    
};

new hoge.Hoge();
```

[答え](http://jsfiddle.net/Xfq2a/1/)

## 7

```js
console.log((function(){ return this; })() === window);
```

[答え](http://jsfiddle.net/hdeFK/1/)

## 8

```js
'use strict';
console.log((function(){ return this; })() === window);
```

[答え](http://jsfiddle.net/aSWMj/1/)

## 9

```js
function hoge(){
    console.log(this === window);
}

hoge.apply(window);
```

[答え](http://jsfiddle.net/4DemV/1/)

## 10

```js
function hoge(){
    console.log(this === window);
}

hoge.apply(42);
```

[答え](http://jsfiddle.net/8bGRk/1/)

## 11

```js
function hoge(){
    console.log(this === window);
}

hoge.apply();
```

[答え](http://jsfiddle.net/yZqGK/1/)

## 12

```js
'use strict';
function hoge(){
    console.log(this === window);
}

hoge.apply();    
```

[答え](http://jsfiddle.net/Af5F5/1/)

## 13

```js
function hoge(){
    console.log(this === window);
}

hoge.apply(undefined, []);
```

[答え](http://jsfiddle.net/vGCW8/1/)

## 14

```js
console.log(eval('this') === window);
```

[答え](http://jsfiddle.net/sMCfJ/)

## 15

```js
'use strict';
console.log(eval('this') === window);
```

[答え](http://jsfiddle.net/aH5He/)

## 16

```js
(function(){
    console.log(eval('this') === window);
})();
``````

[答え](http://jsfiddle.net/53yN7/)

## 17

```js
'use strict';
(function(){
    console.log(eval('this') === window);
})();
```

[答え](http://jsfiddle.net/ydUAS/)

## 18

```js
var _eval = eval;
console.log(_eval('this') === window);
```

[答え](http://jsfiddle.net/H74Ns/1/) ( [改題前の問題と答え](http://jsfiddle.net/H74Ns/) )

## 19

```js
'use strict';
var _eval = eval;
console.log(_eval('this') === window); 
```

[答え](http://jsfiddle.net/xzEk8/1/) ( [改題前の問題と答え](http://jsfiddle.net/xzEk8/) )

## 20

```js
'use strict';
(function(){
    var _eval = eval;
    console.log(_eval('this') === window); 
})();
```

[答え](http://jsfiddle.net/AukpQ/1/) ( [改題前の問題と答え](http://jsfiddle.net/AukpQ/) )

## 21

```js
console.log(new Function('return this')() === window);
```

[答え](http://jsfiddle.net/ByBRj/)

## 22

```js
'use strict';
console.log(new Function('return this')() === window);    
```

[答え](http://jsfiddle.net/nnnfD/)