■変数について
// とちらも変数宣言(ただしwindowは省略可能なので一般的に省略)
let a = 0;
window.d = 1;
// スコープにより書き換え可能
d = 2;
■ブロックスコープ
{/* 普通{}で囲まれた範囲をブロックという */}
{
function d() {
console.log('d is called');
}
}
// 下の関数は実行可能で、「d is called」がコンソールに出力される
d();
function a() {/* この場合、ブロックスコープではなく関数スコープという */}
■レキシカルスコープ
→宣言した場所で変数が見える範囲が決まること
→自身よりも外部にあるスコープは、自身の中で参照することが可能
// グローバル変数
let a = 2;
function fn1() {
let b = 1;
function fn2() {
let c = 3;
// bはfn2からみると外部スコープなので参照することが可能
console.log(b)
}
fn2();
}
fn1();
■オブジェクトについて
let obj = {
prop1: 'value1',
// 無名関数をオブジェクト内に宣言することができる
prop2: function() {
console.log('value2')
}
}
// オブジェクトないの関数を呼び出す
obj.prop2();
■Javascriptの互換性
→ブラウザ、ネット上で使用できる物が異なってくる
→ブラウザだと、DOM APIなどを使用することができる
→その反面、ネット上だとnode.js(common.js)を使用する
→Javascriptをどこで実行するかにより、使用する物が異なっている
■コールスタック
function a() {
}
function b() {
a()
}
function c() {
b();
}
c();
コールスタックとは、後から入ってきた関数が先に呼び出されること
→呼び出された関数は、関数が終了後破棄される
→今回の場合なら、関数cが終了すると一連のコールスタックが終了する