見出し画像

JavaScript初心者の私が困った単語まとめ その1

現在のレベル

・var、functionは使えるけどclassの使い方はイマイチわからない
・for文、if文は大体理解してるもののゼロから書くときはぐぐる
・ドットが続くと混乱する
・Pythonも同時に勉強しているのでどっちがどっちかたまにわからなくなる

学習法

書籍派なのでこの辺を購入しました。

1. 『確かな力が身につくJavaScript「超」入門
→頑張って写経してたけどjQueryが出てきた瞬間に華麗に本を閉じました。

2. 『何となくJavaScriptを書いていた人が一歩先に進むための本
→kindleで400円だったから買ってみた。性格上、電子書籍だと勉強意欲がわからなくてパラっと見て本を閉じました。

3. 『開眼! JavaScript ―言語仕様から学ぶJavaScriptの本質
→イマココ。Amazonの口コミで「開眼しちゃった!」と言ってる人が続出していたので羨ましいなと思って購入。悟れる気配は皆無ですが、まだ本は閉じずに不明点を洗うのがこのnoteの目標。

4. 『改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで
→3がある程度わかるようになったら買いたいなって、ワクワクしてる本。新しい本を買いたいがために勉強する女心。

仕事でWebメディアを扱っているので、「タグマネ管理やフロントの些細な改修くらいは自分一人の力でさくっと対応できるようになってきたわ〜!」と実感するのが3ヶ月後の目標。

まだまだスタートラインですが、私がつまづいたポイントを復習がてら解説を備忘録で残します。

「prototype」とは何か?

調べていると「オブジェクト同士の繋がりを保持する機能」という記述が多い。どうやら、一度定義したオブジェクトの中身をコピーして、他のオブジェクトでも使えるようにする機能らしい。

個人的には「prototype」って字面がクールで好きなので、ぜひ使えるようにしたい。

「グローバルオブジェクト」とは何か?

Webブラウザ環境でJavaScriptコードを書く場合には、windowオブジェクト内にJavascriptを格納し、windowオブジェクト内で実行する必要があります。このwindowオブジェクトや、他の環境でwindowと同等の働きをするオブジェクトは「グローバルオブジェクト」と言われます。

(「開眼! JavaScript ―言語仕様から学ぶJavaScriptの本質」より)

さっぱりわからないので予想するに、

var love = 'you';

ここではloveがグローバルオブジェクト。

グローバルオブジェクトloveの中に、'you'という値を入れたと言える。

「スコープ」とは何か?

これは簡単(のような気がする)。

出力する際に、どこを覗きにいくか?ということ(のような気がする)。

ローカルスコープとグローバルスコープがあり、その違いを例で説明。
(evalスコープというタイプもあるものの、まだわからないので割愛。)

var breakfast = 300;

var price1 = function() {
  var lunch = 1000;
  var price2 = function() {
    var dinner = 3000;
    console.log(breakfast + lunch + dinner);
  }();
};

price1();


出力:4300

dinnerの値はconsole.logが呼ばれているprice2関数にかかっているので、ローカルスコープを持っている。
lunchの値はprice2関数の親であるprice1関数のスコープを持っている。
breakfastの値はグローバルスコープを持っている。

変数で関連付けられている値を検索する際、検索プロセスがたどるチェーンがあり、これをスコープチェーンと言う。上記の例では、グローバルスコープまでスコープチェーンをたどったと説明できます。

「クロージャ」とは何か?

クロージャを一言で表すと「スコープチェーンに存在する関数への参照を保持している関数」です。

(「開眼! JavaScript ―言語仕様から学ぶJavaScriptの本質」より)

日本語だと難しい。

例えば、結果を吐き出すごとに1増えていくカウンターの例を見ると、

function counter() {
  var count = 0;
  return function() {
    return ++count;
  }
}

var count = counter();

count();  // 1
count();  // 2

counter関数の内側に、関数を作っている。このように複数の層にわたってスコープチェーンを繋いでいく関数のこそがクロージャ。

すべての関数は中に関数を持つことができるので、「すべての関数がクロージャ」と言われる所以はそこにあるもよう。

● 最後に:初心者のぼやき
ネストとかインクリメントとかブラケットとかプロパティとか、カタカナ語が全然わからない。

と思いきや、これは英語力がないことを示している可能性を感じて悲しい。

この記事が気に入ったらサポートをしてみませんか?