17.
スコープ
二種類しかないよ
var globar = 'global desu';
!
function scope1() {
var locar = 'local desu';
console.log(globar); // global desu
function scope2() {
var locarSecond = 'local mark2 desu';
console.log(locar); // local desu
}
console.log(locarSecond); // ReferenceError: locarSecond
is not defined
}
console.log(locar); // ReferenceError: locar is not
defined
18.
スコープ
応用テクニック
(function() {
var locar = 'local desu';
window.globar = 'global desu';
})();
console.log(locar); // ReferenceError: locar is not
defined
console.log(globar); // global desu
グローバル汚染を防ぐため、ほんとに最低限の作法。
モダンJSにおいてはモジュール化の手法を学ぶべし。
25.
クロージャを使った解答
var incrementGenerator = function (start) {
var inc = function () {
start += 1;
return start;
}
return inc;
};
!
var inc1 = incrementGenerator(0);
var inc2 = incrementGenerator(0);
!
inc1(); // 1
inc2(); // 1
inc1(); // 2
inc2(); // 2
26.
なるほどわからん
関数閉包はプログラミング言語における関数オ
ブジェクトの一種。いくつかの言語ではラムダ
式や無名関数で実現している。引数以外の変数
を実行時の環境ではなく、自身が定義された環
境(静的スコープ)において解決することを特
徴とする。関数とそれを評価する環境のペア
であるともいえる。この概念は少なくとも
1960年代のSECDマシンまで ること
ができる。
from wikipedia
どういうこと?
27.
復習:スコープ
var globar = 'global desu';
!
function scope1() {
var locar = 'local desu';
console.log(globar); // global desu
function scope2() {
var locarSecond = 'local mark2 desu';
console.log(locar); // local desu
}
console.log(locarSecond); // ReferenceError:
locarSecond is not defined
}
console.log(locar); // ReferenceError: locar is not
defined
28.
復習:スコープ
var staticScope = (function () {
var locar = 'local desu';
var innerEnvironment = function () {
return locar;
};
return innerEnvironment;
})();
!
console.log(staticScope()); // local desu
console.log(staticScope()); // local desu
参照した変数が生き続ける
Be the first to comment