リアクション(a)は、「あなたはJavaScriptを知りません」

週間では、「あなたは、JavaScriptを知らない」読みますが、疑問の多くを残したので、彼にはJavaScriptの内容に戻って困惑見ていたし、少しあげました。

この本を読んで二回目は、私はより深い理解を持つことができるように願っています。

字句スコープ

......場合がある状態です解決プロセスの、だけでなく、単語の意味を与える......

コンパイラ理論、あいまいなビットの内容のこの小さな部分を研究していないので、もし、この本の内容の一部は、開口部にはJavaScriptの原則と一緒にコンパイルされます。

ほとんどの人は、コンパイラの理論と接触していないが、一つのことがあるが、マークダウン構文を知っている必要があります。実際には、HTMLファイルへの値下げから字句プロセスのプロセスが含まれています。

どのような状態でしょうか。大まかに言えば、それはパターンのマッチングの問題である、または文字列と一致すると考えることができます。

ソース文字列:"str782yui"文字列が一致するように:"sj1"、シンプルなマッチングアルゴリズムを考える、私たちはあなたでは、たびに、その後、比較を比較するために、ゼロからスタートするために、2つの感情、同じ/異なるとの文字があり、各文字を受け入れますこれは、状態の1つになります。

単純なパターンマッチング

これは状態と呼ばれています。もちろん、これはうわべだけの類推で、よりよいがあるかもしれません。

真実を伝えるために、コンパイラの理論は便利な科目ですが、時間は実際にそれは非常に苦痛だった学びます。

次のコードを考えてみます。

function foo(a) {
  var b = a*2;
  function bar(c) {
      console.log(a, b, c);
  }
  bar(b*3);
}
foo(2);

この例では3つの段階的、ありますネストされたスコープは ......

Javaプログラマのために、中括弧のペアは、あなたは、変数の範囲を限定することができ、およびスコープの関係は持っている兄弟親子をこれは非常に便利なものである2と同様に、パッケージ(パッケージ)です。

JavaScriptが同じではありませんが、中括弧のペアが定義されたスコープではなく、変数var変数宣言の存在を強化するため、時には我々は予想通り花に閉じ込めすることができない変数を見つけるだろうブラケットは、それは古典的な質問がたくさんいました。

JavaScriptの機能ブロックと子供がスコープを作成することができますが、個人的にキャッチに等しいですキャッチサブブロックの範囲および使用を作成するためにセマンティックあいまいさを追加するプログラムを引き起こす可能性がある、と言うことができない、と信じてキャッチ悪い読み取りなります。しかし、我々はすべて、私はそれの流れに行きますか。

1は冗談の出入りする場所を知っていないと思いますが、彼女は言った:キャッチ例外処理は、キーが、フロー制御文ではありません。

スコープと呼ばれる変数に言及するようにしてくださいシールドを、それは単に単語に:同じ名前の内部スコープ変数は、外部変数のスコープをシールドします

それ誰かが私が合格(コードの上)、頼むかもしれないfoo.bこの方法がそれにアクセスすることはできませんか?

......私はシェーンにしたいですか?私は、オブジェクトが、それはないと思いますか?しかし、あなたがすることができwindow.foo、このようfooの中でグローバル変数にアクセス、なぜ?これはwindowまあ、すべてのグローバル変数が自動的にグローバルオブジェクトのプロパティとなりますグローバルオブジェクトではありません。

......レキシカルスコープを見つけるだけの識別子を見つける......

この文は、私が上記の提起の質問への答えです。

function foo(str, a) {
  eval(str);
  console.log(a, b);
}
var b = 2;
foo("var b = 3", 1);

eval(..)コールでは「var b = 3;」このディアマンテはすでにどこと同じように扱われます......

声明は良い一口ああですか?

時には、手順書の文字列がどのように便利なああ、のような変数になることができれば、私は、ジーを思うだろう。

evalのは、それがほぼ完了しています。この本は、おそらく読者に理解を可能にし、その周りに述べています。

私の意見では、evalの機能はありません動的に同じ実行を行い、別のプログラムに、対応する位置に挿入されたコードの一部を生成しています。

声明で実際にあなたが作成するために薄い空気の外にそれを渡すオブジェクトに基づいて新しいレキシカルスコープを

ここではスコープを作成するには、キーワードを追加しました。

var obj = {
    a: 1
};
with(obj) {
    a = 2;
    b = 3;
};

上記のコードは、私たちは、objが文での範囲内にある内側のスコープとして宣言して、理解し、そう......することができます

evalの(..)および他の書き込みを欺くために、実行時に新しいスコープを変更または作成するときに定義された字句スコープを持ちます。

スコープが作成されるとのevalは、変更されます。

両方のプログラムが原因の影響に性能低下につながるコンパイラの最適化、多分スイッチのように、実際には、いずれかがある場合には、オープンコンパイラの最適化]ボタンを禁止します。同じの、いわゆる禁止コマンド転位のように。

概要

|ू・ω・ `):この本は本当にいいです。

おすすめ

転載: www.cnblogs.com/keepsmart/p/11615964.html