ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScriptの関数呼び出しとパラメータ受け渡しの使用例を詳しく解説

JavaScriptの関数呼び出しとパラメータ受け渡しの使用例を詳しく解説

伊谢尔伦
リリース: 2017-07-26 17:30:51
オリジナル
4251 人が閲覧しました

JavaScript 関数呼び出し

各メソッドの違いは、この初期化にあります。

パラメータを値で渡す
関数内で呼び出されるパラメータは、関数のパラメータです。関数がパラメーターの値を変更する場合、パラメーターの初期値 (関数の外部で定義された) は変更されません。関数のパラメーターを変更しても、関数の外部の変数 (ローカル変数) には影響しません。
オブジェクトを介してパラメーターを渡す
JavaScript では、オブジェクトの値を参照できます。したがって、関数内でオブジェクトのプロパティを変更すると、その初期値も変更されます。オブジェクトのプロパティの変更は、関数 (グローバル変数) の外部で行うことができます。

このキーワード

一般に、JavaScript では、関数が実行されるときに、これは現在のオブジェクトを指します。注 これは予約されたキーワードであり、この値は変更できないことに注意してください。

JavaScript 関数を呼び出す

関数内のコードは、関数が呼び出された後に実行されます。

関数として呼び出される

インスタンス


function myFunction(a, b) {
  return a * b;
}
myFunction(10, 2);      // myFunction(10, 2) 返回 20
ログイン後にコピー

上記の関数はどのオブジェクトにも属しません。ただし、JavaScript では、これは常にデフォルトのグローバル オブジェクトです。 HTML のデフォルトのグローバル オブジェクトは HTML ページ自体であるため、関数は HTML ページに属します。ブラウザ内のページ オブジェクトはブラウザ ウィンドウ (ウィンドウ オブジェクト) です。上記の関数は自動的にウィンドウオブジェクトの関数になります。 myFunction() と window.myFunction() は同じです:


function myFunction(a, b) {
  return a * b;
}
window.myFunction(10, 2);  // window.myFunction(10, 2) 返回 20
ログイン後にコピー

注: これは JavaScript 関数を呼び出すための一般的な方法ですが、メソッドや関数によって名前の競合が発生しやすいため、良いプログラミング方法ではありません。
グローバルオブジェクト
関数が自身のオブジェクトから呼び出されない場合、thisの値がグローバルオブジェクトになります。 Web ブラウザでは、グローバル オブジェクトはブラウザ ウィンドウ (ウィンドウ オブジェクト) です。このインスタンスによって返される this の値は window オブジェクトです:


function myFunction() {
  return this;
}
myFunction();        // 返回 window 对象
ログイン後にコピー

注: 関数をグローバル オブジェクトとして呼び出すと、this の値がグローバル オブジェクトになります。 window オブジェクトを変数として使用すると、プログラムが簡単にクラッシュする可能性があります。

メソッドとしての関数呼び出し

JavaScript では、関数をオブジェクトのメソッドとして定義できます。次の例では、2 つのプロパティ (firstName と lastName) とメソッド (fullName) を持つオブジェクト (myObject) を作成します。


var myObject = {
  firstName:"John",
  lastName: "Doe",
  fullName: function () {
    return this.firstName + " " + this.lastName;
  }
}
myObject.fullName();     // 返回 "John Doe"
ログイン後にコピー

fullName メソッドは関数です。関数はオブジェクトに属します。 myObject は関数の所有者です。 このオブジェクトは JavaScript コードを保持します。インスタンス内の this の値は myObject オブジェクトです。 以下でテストしてください! fullName メソッドを変更し、次の値を返します:


var myObject = {
  firstName:"John",
  lastName: "Doe",
  fullName: function () {
    return this;
  }
}
myObject.fullName();     // 返回 [object Object] (所有者对象)
ログイン後にコピー

注: 関数がオブジェクト メソッドとして呼び出される場合、this の値はオブジェクト自体になります。

コンストラクターを使用して関数を呼び出します

関数呼び出しの前に new キーワードが使用される場合、コンストラクターが呼び出されます。 これは新しい関数が作成されたように見えますが、実際には JavaScript 関数はオブジェクトを再作成されます:


// 构造函数:
function myFunction(arg1, arg2) {
  this.firstName = arg1;
  this.lastName = arg2;
}

// This creates a new object
var x = new myFunction("John","Doe");
x.firstName;               // 返回 "John"
ログイン後にコピー

コンストラクターへの呼び出しにより、新しいオブジェクトが作成されます。新しいオブジェクトはコンストラクターのプロパティとメソッドを継承します。注 コンストラクター内の this キーワードには値がありません。 this の値は、関数が呼び出されたときにオブジェクト (新しいオブジェクト) がインスタンス化されるときに作成されます。

関数メソッドとして関数を呼び出す

JavaScript では、関数はオブジェクトです。 JavaScript 関数にはプロパティとメソッドがあります。 call() と apply() は事前定義された関数メソッドです。 関数の呼び出しには 2 つのメソッドを使用できます。両方のメソッドの最初のパラメータはオブジェクト自体である必要があります。


function myFunction(a, b) {
  return a * b;
}
myFunction.call(myObject, 10, 2);   // 返回 20
ログイン後にコピー

Instance


function myFunction(a, b) {
  return a * b;
}
myArray = [10,2];
myFunction.apply(myObject, myArray);  // 返回 20
ログイン後にコピー

どちらのメソッドも、オブジェクト自体を最初のパラメータとして使用します。 2 つの違いは 2 番目のパラメータにあります。apply はパラメータ配列で渡されます。つまり、複数のパラメータが 1 つの配列に結合されて渡されますが、call は call のパラメータとして (2 番目のパラメータから開始して) 渡されます。
JavaScript 厳密モードでは、パラメーターがオブジェクトでなくても、関数を呼び出すときに最初のパラメーターが this の値になります。
JavaScript の非厳密モード (非厳密モード) では、最初のパラメーターの値が null または未定義の場合、代わりにグローバル オブジェクトが使用されます。
注 call() または apply() メソッドを通じて、this の値を設定し、既存のオブジェクトの新しいメソッドとして呼び出すことができます。

JavaScript関数のパラメータ

JavaScript関数はパラメータ(引数)の値のチェックを行いません。 関数の明示的なパラメーターと隠しパラメーター (引数) 前のチュートリアルでは、関数の明示的なパラメーターについて学習しました:


functionName(parameter1, parameter2, parameter3) {
  code to be executed
}
ログイン後にコピー

関数の明示的なパラメーターは、関数が定義されるときにリストされます。 関数の隠しパラメータ(引数)は、関数が呼び出されたときに関数に渡される実際の値です。

参数规则
JavaScript 函数定义时参数没有指定数据类型。
JavaScript 函数对隐藏参数(arguments)没有进行检测。
JavaScript 函数对隐藏参数(arguments)的个数没有进行检测。
默认参数
如果函数在调用时缺少参数,参数会默认设置为: undefined

有时这是可以接受的,但是建议最好为参数设置一个默认值:


function myFunction(x, y) {
  if (y === undefined) {
     y = 0;
  } 
}
ログイン後にコピー

或者,更简单的方式:


function myFunction(x, y) {
  y = y || 0;
}
ログイン後にコピー

Note 如果y已经定义 , y || 返回 y, 因为 y 是 true, 否则返回 0, 因为 undefined 为 false。如果函数调用时设置了过多的参数,参数将无法被引用,因为无法找到对应的参数名。 只能使用 arguments 对象来调用。

Arguments 对象
JavaScript 函数有个内置的对象 arguments 对象.argument 对象包含了函数调用的参数数组。通过这种方式你可以很方便的找到最后一个参数的值:


x = findMax(1, 123, 500, 115, 44, 88);

function findMax() {
  var i, max = 0;
  for (i = 0; i < arguments.length; i++) {
    if (arguments[i] > max) {
      max = arguments[i];
    }
  }
  return max;
}
ログイン後にコピー

或者创建一个函数用来统计所有数值的和:


x = sumAll(1, 123, 500, 115, 44, 88);

function sumAll() {
  var i, sum = 0;
  for (i = 0; i < arguments.length; i++) {
    sum += arguments[i];
  }
  return sum;
}
ログイン後にコピー

以上がJavaScriptの関数呼び出しとパラメータ受け渡しの使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート