Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptでスコープがどのように機能するか

JavaScriptでスコープがどのように機能するか、およびグローバルスコープ、ローカルスコープ、レキシカルスコープの違いについて説明します。

範囲 関数または変数にアクセスできるコンテキストを指します。 JavaScriptには、グローバルスコープ、ローカルスコープ、字句スコープの3つのスコープタイプがあります。

  • グローバル変数 コードブロックの外部で宣言された変数です
  • ローカル変数 コードブロック内で宣言された変数です

知っておきたいこと: 関数は、外部に設定されている変数やその他の関数にアクセスできます。 それ自体—ただし、内部に設定されている変数は含まれません その他の機能。

すぐに意味があります。

グローバルスコープ

グローバルスコープ内の変数または関数は、他の関数内からアクセスできます:

// Global scope
let dogBreed = "Labrador"

let getDogBreed = function() {
  // dogBreed is accessible because it’s in the global scope
  console.log(dogBreed)
  // "Labrador"
}

// Run function
getDogBreed()

これには、関数内の関数が含まれます:

// Global scope
let dogBreed = "Labrador"

let getDogBreed = function() {
  // function inside function
  let getDogBreedFromGlobalScope = function() {
    // accesses dogBreed from the global scope
    console.log(dogBreed)
    // "Labrador"
  }
  // Run function
  getDogBreedFromGlobalScope()
}

// Run function
getDogBreed()

ローカルスコープ

ローカルスコープを持つ変数または関数は、それ自体のコンテキスト(スコープ)内からのアクセスのみです:

let getDogBreed = function() {
  // local variable scope
  let dogBreed = "Labrador"
  // We can access the dogBreed variable because it’s local
  console.log(dogBreed)
  // "Labrador
}

変数dogBreed にはローカルスコープがあり、そのスコープ内(中括弧{ .. }内)からのみアクセスできます。 )

上記と同じコードですが、今回はconsole.log(dogBreed)を移動します ローカルスコープの外にあるため、グローバルスコープになりました:

let getDogBreed = function() {
  // local variable scope
  let dogBreed = "Labrador"
}

// Try to access a locally scoped variable
console.log(dogBreed)
// Uncaught ReferenceError: dogBreed is not defined

“dog breed is not defined”という参照エラーが発生します 、グローバルスコープからローカルスコープの変数をログアウトしようとしているためです。

レキシカルスコープ

ネストするとき 関数(関数を関数内に配置)、親関数(最も外側の関数)内の変数および関数には、内部関数からアクセスできます。これは字句スコープと呼ばれます。

ただし、親(最も外側の)関数自体は、内部関数内の変数または関数にアクセスできません。それはそれよりも混乱しているように聞こえるかもしれません。例を見てみましょう。そうすれば意味があります:

// Global scope
let animals = function() {
  // Lexical scope
  let dogBreed = "Labrador"
  // Nested function
  let getAnimals = function() {
    // We can access dogBreed because it's in the lexical scope
    console.log(dogBreed)
    // "Labrador"

    // Here’s a locally scoped variable
    let catBreed = "Persian"
    console.log(catBreed)
    // "Persian"
  }
  // Run function
  getAnimals()

  // This works because the dogBreed variable is in the lexical scope
  console.log(dogBreed)
  // "Labrador"

  // This won’t work, because catBreed is not in the lexical scope, it’s local to the getAnimals() function
  console.log(catBreed)
  // Uncaught ReferenceError: catBreed is not defined
}

animals()

  1. OperaでJavaScriptを有効にする方法は?

    OperaでJavaScriptを有効にするには、以下の手順に従ってください。 Operaブラウザを開き、左側をクリックします。次に、[設定]をクリックします : 現在、検索設定の下にあります 、 javascriptを検索します 。 検索すると、以下に示すようにjavascriptを許可する次のオプションが表示されます。

  2. JavaScriptでメソッドを借りる方法は?

    call()、apply()、bind()は、JavaScriptのメソッドを借用するために使用されます。 以下は、JavaScriptでメソッドを借用するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> &