Javascriptの終了例

| | | | | | | | | | | | | | | | | | | | | | | | |

JavaScriptの最大のパスワードの1つはシャットダウンです。彼はFAANG企業での就職の面接で多くの質問の対象となっています。この記事では、フェンスと目標について説明し、簡単な例で概念を説明してから、最大のハイテク巨人の1人へのインタビューからのサンプル質問で締めくくります。

誰かが何かがプロジェクトの一部であるかどうかをあなたに言うとき、それはどういう意味ですか?

潜望鏡または望遠鏡について考えたいですこの質問への答えを考えるとき。これらのツールは、彼が持っているレンズの範囲内であらゆる種類のものを表示します。彼はフィールドにいます。 範囲外の場合、レンズの直径を超えて見ることはできません。そして、直径の外側の何かを照らすことは不可能です。 JavaScriptの3つの非常に重要で異なるタイプのスコープ(ローカル、グローバル、レキシカル)について説明するときに、これについて考える必要があります。

ローカルスコープ

ローカルスコープは今日説明する3つのスコープ。関数を宣言するとき、角括弧({})で囲まれたものはすべて関数に対してローカルであると見なされます。 JavaScriptエンジンは関数を読み取るときに、変数を宣言します。終了すると、変数が破棄されます。

ご覧のとおり、呼び出されたグリーティング関数の結果が「console.log()」の場合、関数が再生されました。これにより、探していた「Hello Karma Career、"」チャネルが得られます。すでに述べたように、関数で宣言された変数のconsole.log() は、定義できないためエラーを生成します。 。

、WebsiteNameが定義されていない理由は、変数が呼び出されると関数内で作成され、端末命令が実行されると破棄されるためです。関数外のものは、それがない限り、関数内のものにアクセスできません。は特定の構成を持っています。

グローバルリーチ

この次のフィールドは、ほとんど文字通りのフレーズの翻訳です。グローバルスコープは、関数の外部で宣言された要素を受け取り、それらをスペースに予約しますここで、すべてのスクリプト、メソッド、および関数は、それらにアクセスして独自のロジックに使用できます。

console.log()がコードの最後でカウントされる場合、上記のコードは何をしますか?何が起こると思いますか?

コードを見てみましょう。

  1. 変数カウンターグローバル環境で宣言および開始された
  2. グローバル環境で宣言された関数を追加しました。
  3. Addが呼び出されます。
  4. ロケールで宣言および開始されたカウンタ変数。
  5. グローバルではなくローカルであるため、ローカルカウンターは1増加しますか?
  6. カウンターが返されます。関数の終わり。
  7. 追加が再度呼び出されます
  8. 手順4から6を実行します。
  9. 手順3をもう一度繰り返します6.a
  10. console.log(counter)、何が返されますか?
  11. カウンタが1になると関数が終了するため、ローカルカウンタ変数が再び宣言され、関数が実行されるたびに0で再起動します。何が起こっても、カウンターは常にローカルで1で停止します。

    関数がスコープ内で変数を検出した場合、変数のグローバルスコープを検索しないため、グローバル変数は変更されません。次に、この命令の環境で最も近くに定義された変数がグローバル環境にあるため、 console.log()は0を生成します。

    字句スコープ

    字句スコープは、JavaScriptの基本的な概念の1つです。関数または変数の作成は、コードの特定の部分にアクセスできるため、コードの他の部分にはアクセスできないという考えです。それはすべて、各変数と関数の宣言がどこにあるかによって異なります。

    このコードブロックを見てみましょう。

    ここに入れ子関数のセットがあります。 init()関数はvar1という変数を宣言し、secondという関数を宣言し、 second()を呼び出します。

コンパイラーがこのコードを初めて実行するとき、私たちが持っているものを高レベルで調べます:

この時点では、init()内には他に何も表示されません。init()関数が呼び出されたときにのみ関数が存在することがわかり、コンパイラは関数内にあるものを別の高レベルで調べます。

  1. var1。
  2. seconds()
  3. second()呼び出し
  4. init()は、 seconds()ブロック内で何が起こっているかを知りません。表示できるのは字句環境-周囲の状態にあるもの。

    ネストされた各関数は、ネストされたロシアのmatryoshkaのセットなどの小さなコンテナに存在します(たとえば、whがわからない場合のページ彼らはそうです)。彼女の人形は、コンテナ内で何が起こっているのか、そしてすでに何が起こっているのか、または親で何が起こっているのか/読んでいるのかを知っています。たとえば、大きな人形は、次の人形がそのコンテナに存在することだけを知っています。彼女はセット内の他の人形を知りません。彼女の語彙環境にあるもの(彼女の状態)とすでに起こったこと(外側の領域)だけを知っています。

    実際、私たちは2つのことを知っています。

    1. 外部ドメインは内部ドメインを認識できません
    2. 内部スコープは外部ドメインにアクセスできます。

    外部は何を認識できないため内部で起こっているので、これは一方向の関係であると安全に言うことができます。内部は外部から変数を表示して使用できますが、外部は内部を表示できません。これは字句ファイナリティと呼ばれます。

    字句スコープの利点は、変数の値がコード内での配置によって決定されることです。 。関数はまず、そのロケールで変数の意味を探します。変数が見つからない場合は、その関数を定義する関数に移動します。そこに見つからない場合は、次の定義済み関数へのチェーンを上っていきます。

    これはJavaScriptで非常に重要な概念になりつつあり、詳細を学ぶにつれて何度も出てきます。 JavaScriptフレームワークとその仕組みについて。外から行くことはできますが、逆に「上がる」ことはできません。これは、問題の主要な主題に関して非常に重要です:終了

クロージャ

クロージャの定義は字句スコープの定義と非常に似ています。2つの主な違いは、クロージャは高次の関数であり、字句スコープはそうではありません。高次関数には、関数を返すか、関数をパラメーターとして使用するという1つの基本的な特性があります。

クロージャは、字句スコープに到達できる関数です。この関数が後で呼び出されたとき。

クロージャと字句スコープの両方に独自の変数があり、親関数の変数とパラメータにアクセスでき、グローバル変数を使用できます。次のコードを使用します。

  1. Greeting()関数は存在しますが、内容はまだわかりません。
  2. greetUser は存在しますが、その内容はまだわかりません
  3. greetUser()-この行は前の行を呼び出し、前の行は挨拶を呼び出します( )function。
  4. userNamedeclare
  5. welcomeGreeting()は存在しますが、内容はまだわかりません
  6. Returnステートメントブロックの下でwelcomeGreeting()は同じ関数を返します
  7. console.log(`Hello、` + username);ここのconsole.logは、親スコープにアクセスしてuserNameの値を取得できます。
  8. 関数を終了し、コードブロック内の変数の意味を破棄する端末の宣言。
  9. このコードでは、後で親の同腹子にアクセスできるように、関数をネストして情報を渡します