問題:どれが「クロージャ」でしょうか?
func1 から func10 までのどれが「クロージャ」でしょうか?
var scope = "global"; function func1 () { return scope; } var func2 = function () { return scope; }; var func3 = new Function("return scope;"); function foo () { var scope = "function foo"; function func4 () { return scope; } var func5 = function () { return scope; }; var func6 = new Function("return scope;"); var func7 = Function("return scope;"); var func8 = eval("(function() { return scope; })"); var e = eval; var func9 = e("(function() { return scope; })"); } var obj = { scope: "obj", func10: function () { return scope; }, };
さて、スコープチェーンにグローバルしか持たないものをあえて「クロージャ」と呼ぶか否かで答えは変わってきてしまうけれども…。
あと、クロージャは
引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。
クロージャ - Wikipedia
を定義としてみましょうか。