ホームページ ウェブフロントエンド jsチュートリアル javascript_javascript スキルにおける変数スコープと変数プロモーションの詳細な紹介

javascript_javascript スキルにおける変数スコープと変数プロモーションの詳細な紹介

May 16, 2016 pm 05:19 PM
javascript 変数スコープ 変数昇進

変数スコープ
「変数のスコープは、変数が存在するコンテキストを表します。アクセスできる変数と、変数にアクセスする権限があるかどうかを指定します。」

変数のスコープはローカルスコープとグローバルスコープに分かれます。

ローカル変数 (関数レベルのスコープ)
他のオブジェクト指向プログラミング言語 (C、Java など) とは異なり、JavaScript にはブロックレベルのスコープ (中括弧で囲まれた) がありません。 ; の場合、JavaScript には関数レベルのスコープがあります。つまり、関数内で定義された変数は、関数内で、または関数内の関数によってのみアクセスできます (クロージャを除く。これについては数日以内に記事を書きます)。 。

関数レベルのスコープの例:


コードをコピー コードは次のとおりです:

var name = "Richard" ;

function showName () {
var name = "Jack" // この showName でのみアクセス可能 function
console.log (name); // Jack
}
console.log (name); // リチャード: グローバル変数

にはブロック スコープがありません:


コードをコピー コードは次のとおりです:

var name = "Richard" ;
// この if ステートメント内のブロックは、名前変数のローカル コンテキストを作成しません
if (name) {
name = "Jack"; // この名前はグローバル名変数であり、ここでは「Jack」に変更されています
console.log (name); // Jack: 依然としてグローバル変数
}

// ここで、name 変数は同じグローバル名変数です。ただし、if ステートメントで変更されました
console.log (name) // Jack;

// var キーワードを使用することを忘れないでください。
// var キーワードを使用せずに変数を宣言すると、その変数はグローバル変数になります。
// ローカル変数を var キーワードで宣言しない場合、ローカル変数はグローバル スコープの一部になります
var name = "Michael Jackson";

function showCelebrityName () {
console.log (名前);
}

function showOrdinaryPersonName () {
name = "Johnny Evers";
console.log (名前);
}
showCelebrityName (); // Michael Jackson

// 名前はローカル変数ではなく、単にグローバル名変数を変更するだけです
showOrdinarypersonName () // Johnny Evers

//グローバル変数は、有名人の名前ではなく、Johnny Evers になりました
showCelebrityName () // Johnny Evers

// 解決策は、var キーワード
関数 showOrdinaryPersonName (); を使用してローカル変数を宣言することです。 {
var name = "Johnny Evers"; // 現在、name は常にローカル変数であり、グローバル変数は上書きされません
console.log (name);
}
// ローカル変数優先順位はグローバル変数よりも大きいです
//グローバル スコープの変数がローカル スコープで再度宣言された場合、ローカル スコープでこの変数を呼び出すと、ローカル スコープで宣言された変数が最初に呼び出されます:
var name = "Paul";

function users () {
// ここで、name 変数はローカルであり、グローバル スコープ内の同じ名前の変数より優先されます
var name = "Jack";

// 名前の検索は、グローバル スコープで関数の外側を調べようとする前に、関数内で開始されます
console.log (name); >
ユーザー () // ジャック
;

グローバル変数

関数の外で宣言されたすべての変数はグローバル スコープ内にあります。ブラウザ環境では、このグローバル スコープは Window オブジェクト (または HTML ドキュメント全体) です。
関数の外で宣言または定義されたすべての変数はグローバル オブジェクトであるため、この変数はどこでも使用できます。たとえば、

// 名前と性別は含まれていませんfunction
var myName = "zhou";
var sex = "male";

//それらはすべてウィンドウ オブジェクト内にあります
console.log(window.myName); // paul
console.log('sex' in window);

変数が var キーワードを使用せずに初めて初期化/宣言された場合、その変数は自動的にグローバル スコープに追加されます。


コードをコピー コードは次のとおりです:

function showAge(){
//年齢の初期化時には var キーワードは使用されないため、グローバル変数になります
age = 20;
console.log(age);
}

showAge(); //20
console.log(age); //年齢はグローバル変数であるため、ここでも出力は 20

setTimeout 関数はグローバル スコープで実行されます

setTimeout の関数はグローバル スコープ内にあるため、関数内で this キーワードが使用される場合、this キーワードはグローバル オブジェクト (ウィンドウ) を指します。

コードをコピーします コードは次のとおりです:

var Value1 = 200;
var Value2 = 20 ;
var myObj = {
Value1 : 10,
Value2 : 1,

caleculatedIt: function(){
setTimeout(function(){
コンソール.log( this.Value1 * this.Value2);
}, 1000);
}
}

myObj.caleculatedIt() //4000;

グローバル スコープの汚染を避けるために、通常、宣言するグローバル変数はできるだけ少なくします。
変数のホイスト
すべての変数宣言は、関数の先頭 (変数が関数内にある場合) またはグローバル スコープの先頭 (変数がグローバル変数の場合) にホイストされます。例を見てみましょう:

コードをコピー コードは次のとおりです。

function showName () {
console .log ( "名: " name);
var name = "Ford";
console.log ("姓: " name);
}

showName ();
// 名: unknown
// 姓: Ford

// unknown が最初に出力される理由は、ローカル変数名が関数の先頭にホイストされているためです
//つまり、最初に呼び出されるのはこのローカル変数です。
// コードが JavaScript エンジンによって実際に処理される方法は次のとおりです。

function showName () {
var name; / 名前がホイストされます (割り当てが以下で行われるため、この時点では未定義であることに注意してください)
console.log ("First Name: " name) // First Name: unknown

name = "Ford "; // 名前には値が割り当てられています

// 現在の名前は Ford
console.log ("Last Name: " name); // 姓: Ford
}

関数宣言は変数宣言を上書きします
関数宣言と変数宣言 (注: これは単なる宣言であり、値が割り当てられているわけではありません) がある場合、変数名と関数名これらはすべて同じであるため、外側のスコープの先頭にプロンプ​​トが表示されますが、関数の優先順位が高いため、変数の値は関数によって上書きされます。

コードをコピー コードは次のとおりです:

// 変数と関数は両方ともnamed myName
var myName;?
function myName () {
console.log ("Rich");
}

// 関数宣言は変数名をオーバーライドします
console.log(myName のタイプ);

ただし、この変数または関数に値が割り当てられている場合、他の変数または関数でそれを上書きすることはできません。

コードをコピー コードは次のとおりです:
// ただし、この例では変数assign は関数宣言をオーバーライドします
var myName = "Richard"; // これは関数宣言をオーバーライドする変数割り当て (初期化) です。

function myName () {
console.log ("リッチ") ;
}

console.log(typeof myName); // 文字列

最後のポイント、厳密モードでは、最初に宣言せずに変数に値を代入すると、エラーが報告されます。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

PHP関数の変数スコープはどのように決定されるのでしょうか? PHP関数の変数スコープはどのように決定されるのでしょうか? Apr 16, 2024 pm 04:51 PM

PHP の変数スコープは、ローカル (関数内)、グローバル (プログラム内でアクセス可能)、クラス スコープ (クラス インスタンス内でアクセス可能) に分かれています。 global キーワードはローカル変数をグローバル変数として宣言でき、static キーワードはローカル変数を静的変数として宣言し、関数呼び出し間で値を保持できます。

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

Golang 関数のライフサイクルと変数スコープの深い理解 Golang 関数のライフサイクルと変数スコープの深い理解 Apr 19, 2024 am 11:42 AM

Go では、関数のライフ サイクルには定義、ロード、リンク、初期化、呼び出し、戻り値が含まれます。変数のスコープは関数レベルとブロック レベルに分割されますが、ブロック内の変数はブロック内でのみ表示されます。 。

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

See all articles