var myObject ={
func1: function () {
console.log(this);
var func2 = function () {
console.log(this) ;
var func3 = function () {
console.log(this);
}();
}();
}
}
myObject
window
window
var myObject ={
myProperty: 'I can see the light',
myMethod: function () {
var self= this;
var helperFunction = function () {
console.log(self.myProperty);
console.log(this);
};
helperFunction();
}
}
myObject.myMethod();
window
myObject
thisを保持
カプセル化
var countUp =function () {
var count = 0;
return function () {
return ++count;
};
}();
console.log(countUp());
console.log(countUp());
console.log(countUp());
子関数からのみアクセス可能
スコープチェーンをだとる
スコープチェーンをだとる
スコープチェーンをだとる
61.
クロージャ失敗例
var foo =function () {
var funcArray = [];
var i;
for (i = 0; i < 3; i++) {
funcArray[i] = function () {
console.log(i);
};
}
return funcArray;
}();
foo[0].();
foo[1].();
子関数からは共通のiにアクセス
関数の参照を保持
62.
クロージャ成功例
var foo =function () {
var funcArray = [];
var i;
var func = function (i) {
return function () {
console.log(i);
};
}
for (i = 0; i < 3; i++) {
funcArray[i] = func(i);
}
return funcArray;
}();
独自に持つローカル変数変数
クロージャを配列に格納