ホームページ ウェブフロントエンド jsチュートリアル JavaScript関数オブジェクトの作成、パラメータ、スコープインスタンスの詳細な説明

JavaScript関数オブジェクトの作成、パラメータ、スコープインスタンスの詳細な説明

Jul 25, 2017 am 11:29 AM
javascript js パラメータ

関数オブジェクト

1.1 関数の作成
JavaScript 関数を作成するためのあまり使用されていない (ほとんど誰も使用していない) 方法は、関数の「コンストラクター」で new 演算子を使用することです:

var funcName = new Function( [argname1, [... argnameN,]] body );
ログイン後にコピー

パラメーター リストには任意の値を含めることができますパラメータの数とその後に関数本体が続きます。例:

var add = new Function("x", "y", "return(x+y)"); 
print(add(2, 4));
ログイン後にコピー

は結果を出力します:
6
しかし、関数本体がより複雑であれば、誰がこのような使いにくい方法で関数を作成するでしょうか?これには多大な労力がかかるため、JavaScript はリテラルを通じて関数を作成するための一種の糖衣構文を提供しています:

function add(x, y){ 
return x + y; 
}
ログイン後にコピー

または:

var add = function(x, y){ 
return x + y; 
}
ログイン後にコピー

実際、このような糖衣構文により、従来の分野のプログラマーにとって誤解が生じます。 function キーワードは Function を呼び出して新しいオブジェクトを作成し、パラメーター リストと関数本体を Function のコンストラクターに正確に渡します。
一般的に言えば、グローバル スコープ (スコープについては次のセクションで詳しく説明します) でオブジェクトを宣言することは、プロパティに値を割り当てることに他なりません。たとえば、上記の例の add 関数は、実際には値を追加するだけです。グローバル オブジェクト、属性名は add、属性の値はオブジェクト、つまり function(x, y){return x+y;} であることを文法的に理解することが重要です。と同じ:

var str = "This is a string";
ログイン後にコピー

へ。これらはすべて、グローバル オブジェクトに新しい属性を動的に追加するだけです。
関数が他のオブジェクトと同様に、独立したオブジェクトとして JavaScript 実行システムに存在することを説明するには、次の例を見てみましょう:

function p(){ 
print("invoke p by ()"); 
} 
p.id = "func"; 
p.type = "function"; 
print(p); 
print(p.id+":"+p.type); 
print(p());
ログイン後にコピー

その通りです。p は匿名関数 (オブジェクト) を指しますが、At です。同時に、他のオブジェクトと同様に、属性を持つこともできます。実行結果は次のとおりです。

function (){ 
print("invoke p by ()"); 
} 
func:function 
invoke p by ()
ログイン後にコピー

1.2 関数のパラメーター
JavaScript では、関数のパラメーターは非常に興味深いものです。たとえば、任意の数の関数を渡すことができます。関数の宣言時に仮パラメータが指定されていない場合でも、次のように関数にパラメータを追加できます。

function adPrint(str, len, option){ 
var s = str || "default"; 
var l = len || s.length; 
var o = option || "i"; 
s = s.substring(0, l); 
switch(o){ 
case "u": 
s = s.toUpperCase(); 
break; 
case "l": 
s = s.toLowerCase(); 
break; 
default: 
break; 
} 

print(s); 
} 

adPrint("Hello, world"); 
adPrint("Hello, world", 5); 
adPrint("Hello, world", 5, "l");//lower case 
adPrint("Hello, world", 5, "u");//upper case
ログイン後にコピー

関数 adPrint は、宣言時に 3 つの仮パラメータを受け入れます: 出力する文字列、出力する長さ、および出力するかどうか大文字と小文字のマーカーに変換します。ただし、呼び出すときは、1 つのパラメーター、2 つのパラメーター、または 3 つのパラメーターを順に adPrint に渡すことができます (3 つ以上のパラメーターを渡すこともできますが、それは問題ではありません)。実行結果は次のとおりです。実際、JavaScript が関数パラメータを処理する場合、他のコンパイル言語とは異なり、インタープリタが関数に渡すのは、関数オブジェクトの生成時に初期化される引数と呼ばれる配列のような内部値です。たとえば、1 つのパラメータを adPrint に渡すと、他の 2 つのパラメータは未定義になります。このようにして、これらの未定義のパラメータを adPrint 関数内で処理し、外部に公開できます。つまり、任意のパラメータを処理できます。
この魔法の引数については別の例で説明します:

Hello, world 
Hello 
hello 
HELLO
ログイン後にコピー

関数 sum には明示的な仮パラメータがありません。では、sum 関数でこれらを参照するにはどうすればよいでしょうか?引数の疑似配列を使用する必要があります。実行結果は次のとおりです:

function sum(){ 
var result = 0; 
for(var i = 0, len = arguments.length; i < len; i++){ 
var current = arguments[i]; 
if(isNaN(current)){ 
throw new Error("not a number exception"); 
}else{ 
result += current; 
} 
} 
return result; 
} 

print(sum(10, 20, 30, 40, 50)); 
print(sum(4, 8, 15, 16, 23, 42));//《迷失》上那串神奇的数字 
print(sum("new"));
ログイン後にコピー

関数スコープ
JavaScript では、スコープの概念が独自の特徴を持っています。 JavaScript は、ブロック スコープなしで関数本体内で有効です。 Java 言語では、次のように for ループ ブロックで添え字変数を定義できます。

150 
108 
Error: not a number exception
ログイン後にコピー

JavaScript では、
public void method(){ 
for(int i = 0; i < obj1.length; i++){ 
//do something here; 
} 
//此时的i为未定义 
for(int i = 0; i < obj2.length; i++){ 
//do something else; 
} 
}
ログイン後にコピー

JavaScript 関数はローカル スコープで実行されます。ローカル スコープで実行される関数本体は、その外部 (おそらくグローバル スコープ) の変数と関数にアクセスできます。 JavaScript のスコープは字句スコープです。つまり、そのスコープは実行時ではなく、定義 (字句解析) 時に決定されます。 例:

function func(){ 
for(var i = 0; i < array.length; i++){ 
//do something here. 
} 
//此时i仍然有值,及I == array.length 
print(i);//i == array.length; 
}
ログイン後にコピー

初心者は次のようになります。この答えを得る:

var str = "global"; 
function scopeTest(){ 
print(str); 
var str = "local"; 
print(str); 
} 
scopeTest();
ログイン後にコピー

そして、正しい結果は次のようになります:

global 
local
ログイン後にコピー

なぜなら、関数scopeTestの定義では、宣言されていない変数strに事前にアクセスし、その後にstr変数にアクセスするため、初期化が実行されるため、最初のprint(str) は未定義のエラーを返します。では、この時点で関数が外部 str 変数にアクセスしないのはなぜでしょうか。これは、字句解析が完了した後、スコープ チェーンを構築するときに、関数内で定義された var 変数がチェーンに組み込まれるためです。関数全体では、scopeTest はすべて表示されます (関数本体の最初の行から最後の行まで)。 str 変数自体が未定義であるため、プログラムは順番に実行され、最初の行で未定義を返します。 value を str に設定するため、行の 3 行目の print(str) は「local」を返します。

以上がJavaScript関数オブジェクトの作成、パラメータ、スコープインスタンスの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

推奨: 優れた JS オープンソースの顔検出および認識プロジェクト 推奨: 優れた JS オープンソースの顔検出および認識プロジェクト Apr 03, 2024 am 11:55 AM

顔の検出および認識テクノロジーは、すでに比較的成熟しており、広く使用されているテクノロジーです。現在、最も広く使用されているインターネット アプリケーション言語は JS ですが、Web フロントエンドでの顔検出と認識の実装には、バックエンドの顔認識と比較して利点と欠点があります。利点としては、ネットワーク インタラクションの削減とリアルタイム認識により、ユーザーの待ち時間が大幅に短縮され、ユーザー エクスペリエンスが向上することが挙げられます。欠点としては、モデル サイズによって制限されるため、精度も制限されることが挙げられます。 js を使用して Web 上に顔検出を実装するにはどうすればよいですか? Web 上で顔認識を実装するには、JavaScript、HTML、CSS、WebRTC など、関連するプログラミング言語とテクノロジに精通している必要があります。同時に、関連するコンピューター ビジョンと人工知能テクノロジーを習得する必要もあります。 Web 側の設計により、次の点に注意してください。

i9-12900Hパラメータ評価リスト i9-12900Hパラメータ評価リスト Feb 23, 2024 am 09:25 AM

i9-12900H は 14 コア プロセッサです。使用されているアーキテクチャとテクノロジはすべて新しく、スレッドも非常に高速です。全体的な動作は優れており、いくつかのパラメータが改善されています。特に包括的で、ユーザーに優れたエクスペリエンスをもたらします。 。 i9-12900H パラメータ評価レビュー: 1. i9-12900H は、q1 アーキテクチャと 24576kb プロセス テクノロジを採用した 14 コア プロセッサで、20 スレッドにアップグレードされています。 2. 最大 CPU 周波数は 1.80! 5.00 ghz で、主にワークロードによって異なります。 3. 価格と比較すると、非常に適しており、価格性能比が非常に優れており、通常の使用が必要な一部のパートナーに非常に適しています。 i9-12900H のパラメータ評価とパフォーマンスの実行スコア

C++ 関数パラメータの型の安全性チェック C++ 関数パラメータの型の安全性チェック Apr 19, 2024 pm 12:00 PM

C++ パラメーターの型の安全性チェックでは、コンパイル時チェック、実行時チェック、静的アサーションを通じて関数が予期される型の値のみを受け入れるようにし、予期しない動作やプログラムのクラッシュを防ぎます。 コンパイル時の型チェック: コンパイラは型の互換性をチェックします。実行時の型チェック:dynamic_cast を使用して型の互換性をチェックし、一致しない場合は例外をスローします。静的アサーション: コンパイル時に型条件をアサートします。

PHP および JS 開発のヒント: 株価ローソク足チャートの描画方法をマスターする PHP および JS 開発のヒント: 株価ローソク足チャートの描画方法をマスターする Dec 18, 2023 pm 03:39 PM

インターネット金融の急速な発展に伴い、株式投資を選択する人がますます増えています。株式取引では、ローソク足チャートは一般的に使用されるテクニカル分析手法であり、株価の変化傾向を示し、投資家がより正確な意思決定を行うのに役立ちます。この記事では、PHP と JS の開発スキルを紹介し、株価ローソク足チャートの描画方法を読者に理解してもらい、具体的なコード例を示します。 1. 株のローソク足チャートを理解する 株のローソク足チャートの描き方を紹介する前に、まずローソク足チャートとは何かを理解する必要があります。ローソク足チャートは日本人が開発した

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

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

jsとvueの関係 jsとvueの関係 Mar 11, 2024 pm 05:21 PM

js と vue の関係: 1. Web 開発の基礎としての JS、2. フロントエンド フレームワークとしての Vue.js の台頭、3. JS と Vue の補完関係、4. JS と Vue の実用化ビュー。

C++ 関数での参照パラメータとポインタ パラメータの高度な使用法 C++ 関数での参照パラメータとポインタ パラメータの高度な使用法 Apr 21, 2024 am 09:39 AM

C++ 関数の参照パラメーター (基本的には変数のエイリアス、参照を変更すると元の変数が変更されます) とポインター パラメーター (元の変数のメモリ アドレスを保存し、ポインターを逆参照して変数を変更します) は、変数を渡したり変更したりするときに使用方法が異なります。参照パラメーターは、コンストラクターまたは代入演算子に渡されるときのコピーのオーバーヘッドを避けるために、元の変数 (特に大きな構造体) を変更するためによく使用されます。ポインター パラメーターは、メモリの場所を柔軟に指定したり、動的データ構造を実装したり、オプションのパラメーターを表すために null ポインターを渡したりするために使用されます。

vlookup関数のパラメータとその意味の説明 vlookup関数のパラメータとその意味の説明 Jan 09, 2024 pm 03:18 PM

Excelを使っているとvlookup関数を使ったことがあると思います。エディターが知っている限り、Lookup_value、Table_array、col_index_num、および Range_lookup という 4 つの vlookup 関数があります。それでは、具体的な使い方をご紹介します~ vlookup関数にはいくつかのパラメータとその意味があり、vlookup関数のパラメータはLookup_value、Table_array、col_index_num、Range_lookupの合計4つです。 1.ルックアップ

See all articles