関数を実装する function()-jsチュートリアル-php.cn

関数を実装する function()

WBOY
リリース: 2023-09-04 09:41:20
オリジナル
1162 人が閲覧しました

関数を実装する function()

関数はコード ステートメントのコンテナであり、括弧で囲まれた()演算子を使用して呼び出すことができます。関数の呼び出し時に関数内のステートメントによって特定の値にアクセスできるように、呼び出し時にパラメーターをかっこ内で渡すことができます。

次のコードでは、new演算子を使用してaddNumbers関数 objectone の 2 つのバージョンを作成します。1 つはより一般的なリテラル モードを使用します。どちらも 2 つのパラメータが必要です。いずれの場合も、関数を呼び出し、括弧内の引数を()演算子に渡します。

例:sample76.html

リーリー

関数は、値を返したり、オブジェクトを構築したり、単にコードを実行するメカニズムとして機能したりするために使用できます。 JavaScript では関数をさまざまに使用できますが、最も基本的な形式では、関数は実行可能ステートメントの唯一のスコープです。


関数()パラメータ

Function()コンストラクターは無制限の数の引数を受け取りますが、Function()コンストラクターが期待する最後の引数は、本体を構成するステートメントを含む文字列です。関数。最後の引数より前にコンストラクターに渡された引数は、作成中の関数で使用できます。複数のパラメータをカンマ区切りの文字列として送信することもできます。

以下のコードでは、Function()コンストラクターの使用法を、関数オブジェクトをインスタンス化するより一般的なパターンと対比しています。

例:sample77.html

リーリー

JavaScript はeval()を使用して関数ロジックを含む文字列を解析するため、Function()コンストラクターを直接利用することは推奨されません。また、通常は推奨されません。多くの人は、eval()は不必要なオーバーヘッドだと考えています。使用されている場合は、コード設計に欠陥がある可能性が高くなります。

newキーワードを使用せずにFunction()コンストラクターを使用すると、コンストラクターのみを使用して関数オブジェクト (new Function('x', 'return x')およびfunction(('x','return x')).

直接呼び出すFunction()関数の構築時にクロージャは作成されません。


Function()プロパティとメソッド

関数オブジェクトには次のプロパティがあります (継承されたプロパティとメソッドを除く):

プロパティ (Function.prototype;):

    ######プロトタイプ######
  • 関数オブジェクトのインスタンスのプロパティとメソッド
関数オブジェクトのインスタンスには、次のプロパティとメソッドがあります (継承されたプロパティとメソッドを除く)。
インスタンス プロパティ (

var myFunction = function(x, y, z) {};

myFunction.length;

):

パラメータ

######コンストラクタ###### ######長さ######
  • インスタンス メソッド (var myFunction = function(x, y, z) {};
  • myFunction.toString();
  • ):######適用する()###### ######電話()######
  • toString()

関数は常に値を返しますコード ステートメントを単に実行する関数を作成することもできますが、関数が値を返すことも一般的です。次の例では、sayHi関数から文字列を返します。

    例:sample78.html
  • リーリー関数で戻り値が指定されていない場合、unknown
  • が返されます。次の例では、
  • yelp関数を呼び出します。この関数は、値を明示的に返さずに、文字列「yelp」をコンソールに記録します。
  • 例:sample79.html
  • リーリーここで覚えておくべき概念は、返す値を明示的に指定しなくても、すべての関数は値を返すということです。戻り値が指定されていない場合、戻り値はundefine
  • になります。

関数は第一級市民です (構文だけでなく値も)

JavaScript では、関数はオブジェクトです。これは、関数を変数、配列、またはオブジェクトに格納できることを意味します。さらに、関数を関数に渡したり、関数から返したりすることができます。関数はオブジェクトであるため、プロパティを持ちます。これらすべての要素により、関数は JavaScript の第一級市民となります。例:sample80.html

リーリー

関数はオブジェクトであり、したがって値であることを理解することが重要です。 JavaScript の他の式と同様に、渡したり拡張したりできます。

パラメータを関数に渡すパラメータは、関数を呼び出すときに関数スコープに値を渡すためのツールです。以下の例では、addFunction()

を呼び出します。 2 つのパラメーターを取るように事前定義しているため、そのスコープ内で 2 つの追加の値を使用できます。

例:sample81.html

リーリー他のプログラミング言語とは対照的に、JavaScript では、パラメーターを受け入れるように関数が定義されている場合でも、パラメーターを省略することは完全に合法です。欠落しているパラメータには、値未定義

が割り当てられるだけです。もちろん、パラメータの値を省略すると、機能が正しく動作しない可能性があります。

予期しないパラメータ (関数の作成時に定義されていなかったパラメータ) を関数に渡しても、エラーは発生しません。これらの引数は、すべての関数で使用できる

arguments

オブジェクトからアクセスできます。


thisarguments值可用于所有函数

在所有函数的范围和主体内,thisarguments值可用。

arguments对象是一个类似数组的对象,包含传递给函数的所有参数。在下面的代码中,即使我们在定义函数时放弃指定参数,我们也可以依赖传递给函数的arguments数组来访问在调用时发送的参数。

示例:sample82.html

ログイン後にコピー

this关键字,传递给所有函数,是对包含该函数的对象的引用。正如您所期望的,对象中包含的作为属性(方法)的函数可以使用this来获取对父对象的引用。当函数定义在全局作用域时,this的值为全局对象。查看以下代码并确保您了解this返回的内容。

示例:sample83.html

ログイン後にコピー

arguments.callee属性

arguments对象有一个名为callee的属性,它是对当前正在执行的函数的引用。此属性可用于从函数范围内引用该函数 (arguments.callee)a 自引用。在下面的代码中,我们使用此属性来获取对调用函数的引用。

示例:sample84.html

ログイン後にコピー

当需要递归调用函数时,这非常有用。


函数实例length属性和arguments.length

arguments对象具有唯一的length属性。虽然您可能认为这个 length 属性将为您提供已定义参数的数量,但它实际上提供了在调用期间发送到函数的参数数量。

示例:sample85.html

ログイン後にコピー

使用所有Function()实例的length属性,我们实际上可以获取函数期望的参数总数。

示例:sample86.html

ログイン後にコピー

arguments.length属性在 JavaScript 1.4 中已弃用,但可以从函数对象的length属性访问发送到函数的参数数量。接下来,您可以通过利用callee属性来首先获取对正在调用的函数的引用 (arguments.callee.length) 来获取长度值。


重新定义函数参数

函数参数可以直接在函数内部重新定义,也可以使用arguments数组。看一下这段代码:

示例:sample87.html

ログイン後にコピー

请注意,我可以使用arguments索引或直接为参数重新分配新值来重新定义 bar 参数的值。


在函数完成之前返回函数(取消函数执行)

通过使用带或不带值的return关键字,可以在调用期间随时取消函数。在下面的示例中,如果参数未定义或不是数字,我们将取消add函数。

示例:sample88.html

ログイン後にコピー

这里要讲的概念是,您可以在函数执行过程中的任何时刻使用return关键字来取消函数的执行。


定义函数(语句、表达式或构造函数)

函数可以用三种不同的方式定义:函数构造函数、函数语句或函数表达式。在下面的示例中,我演示了每种变体。

示例:sample89.html

ログイン後にコピー

有人说函数还有第四种类型的定义,称为“命名函数表达式”。命名函数表达式只是一个包含名称的函数表达式(例如,var add = function add(x, y) {return x+y})。


调用函数(函数、方法、构造函数或call()apply())

使用四种不同的场景或模式调用函数。

  • 作为函数
  • 作为一种方法
  • 作为构造函数
  • 使用apply()call()

在下面的示例中,我们将检查每种调用模式。

示例:sample90.html

ログイン後にコピー

确保您了解所有四种调用模式,因为您将遇到的代码可能包含其中任何一种。


匿名函数

匿名函数是没有给出标识符的函数。匿名函数主要用于将函数作为参数传递给另一个函数。

示例:sample91.html

ログイン後にコピー

自调用函数表达式

函数表达式(实际上是除从Function()构造函数创建的函数之外的任何函数)可以在定义后使用括号运算符立即调用。在以下示例中,我们创建sayWord()函数表达式,然后立即调用该函数。这被认为是一个自调用函数。

示例:sample92.html

ログイン後にコピー

自调用匿名函数语句

可以创建自调用的匿名函数语句。这称为自调用匿名函数。在下面的示例中,我们创建了几个立即调用的匿名函数。

示例:sample93.html

ログイン後にコピー

根据 ECMAScript 标准,如果要立即调用函数,则需要在函数两边加上括号(或将函数转换为表达式的任何内容)。


函数可以嵌套

函数可以无限期地嵌套在其他函数中。在下面的代码示例中,我们将goo函数封装在bar函数内部,该函数位于foo函数内部。

示例:sample94.html

ログイン後にコピー

这里的简单概念是函数可以嵌套,并且嵌套的深度没有限制。

请记住,嵌套函数的this的值将是 JavaScript 1.5、ECMA-262 第 3 版中的头对象(Web 浏览器中的window对象)。


将函数传递给函数以及从函数返回函数

如前所述,函数是 JavaScript 中的一等公民。由于函数是一个值,并且函数可以传递任何类型的值,因此函数可以传递给函数。接受和/或返回其他函数的函数有时称为“高阶函数”。

在下面的代码中,我们将一个匿名函数传递给foo函数,然后立即从foo函数返回。变量bar所指向的正是这个匿名函数,因为foo接受并返回匿名函数。

示例:sample95.html

ログイン後にコピー

因此,当调用bar时,它会调用传递给foo()函数的匿名函数,然后从foo()函数传回并从bar引用多变的。所有这些都是为了展示函数可以像任何其他值一样传递的事实。


在定义函数语句之前调用函数语句(又名函数提升)

函数语句可以在执行期间在其实际定义之前调用。这有点奇怪,但您应该意识到这一点,以便您可以利用它,或者至少知道当您遇到它时会发生什么。在下面的示例中,我在定义sayYo()sum()函数语句之前调用它们。

示例:sample96.html

ログイン後にコピー

发生这种情况是因为在代码运行之前,函数语句被解释并添加到执行堆栈/上下文中。确保您在使用函数语句时意识到这一点。

定义为函数表达式的函数不会被提升。仅提升函数语句。


函数可以调用自身(又名递归)

函数调用自身是完全合法的。事实上,这经常被用在众所周知的编码模式中。在下面的代码中,我们启动countDownFrom函数,然后该函数通过函数名称countDownFrom调用自身。本质上,这会创建一个从 5 倒数到 0 的循环。

示例:sample97.html

ログイン後にコピー

您应该意识到,函数调用自身(也称为递归)或重复执行此操作是很自然的。


结论

函数是 JavaScript 最常用的方面之一,希望您现在对如何使用它们有了更好的了解。

以上が関数を実装する function()の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!