JavaScript 関数の高度な説明

JavaScript 関数の高度な説明

関数定義方法

function fn(){}//名前付き関数 var fun=function(){}//無名関数// new fn=new Funcion("parameter 1","parameter 2","function body")、ほとんど使用されません。
//すべての関数は Function のインスタンス オブジェクトです (関数もオブジェクトです)
var fn = new Function("a","b","console.log(a+b)")
console.log(fn instanceof Object) //true

関数呼び出し(6種類)

これは問題を指摘している

1. 通常機能:ウィンドウ

2. オブジェクトメソッド: インスタンスオブジェクトobj1

3. コンストラクター: インスタンス オブジェクト。プロトタイプオブジェクト内のこれもインスタンスオブジェクトldhを指します。

4. イベント関数をバインド: イベント呼び出しボタン1

5. タイマー: ウィンドウ

6. 関数をすぐに実行: ウィンドウ

関数内のthisポインタを変更する: call(), apply(), bind(),

すぐに関数を呼び出す必要はないが、関数内のthisポインタを変更したい場合はbindを使う。

厳密モード

スクリプト全体または関数に対して有効にします: "use strict";

厳密なモデル構文仕様:

1. 変数は使用前に宣言する必要がある

2. 宣言した変数を自由に削除することはできない

3. 厳密なモデルではグローバルスコープの関数内の this は未定義です

4. コンストラクタは新しい呼び出しを追加しません。これは undefined を指しており、undefined に値を割り当てるとエラーが発生します (以前は window を指していましたが、これは window にプロパティを追加することと同じです)。

5. タイマーの this はまだウィンドウを指しています。イベント、オブジェクト、または呼び出し元を指します。

6. パラメータに同じ名前は付けられない

7. 関数はトップレベルで宣言する必要があります。JavaScript の新しいバージョンでは、「ブロックレベル スコープ」(ES6 で導入) が導入されます。新しいバージョンに対応するために、関数以外のコード ブロック内で関数を宣言することは許可されていません。

高階関数

定義: 高階関数は、他の関数に対して操作を行う関数であり、関数をパラメータとして受け取るか (コールバック関数)、または関数を出力として返します。

閉鎖

クロージャは、別の関数のスコープ内の変数にアクセスできる関数です。簡単に言えば、スコープは別の関数内のローカル変数にアクセスできます。

クロージャの役割: 変数のスコープ拡張

終了演習:

バインディング イベントとタイマーは非同期操作であり、すぐには実行されないことが知られています。

(function(i){...})(i) 関数はすぐに実行され、パラメータは最後に括弧に渡されます。関数内の括弧は再びパラメータを受け取ります。すぐに実行される関数は小さなクロージャとも呼ばれ、その内部にあるすべての関数は内部変数にアクセスできます。

(1)クリックすると現在のインデックス番号が出力されます(インタビューではよくあることです)

(2)<li>内のコンテンツの出力を3秒遅らせる

(3)

閉鎖について考える:

再帰: 自分自身を呼び出す関数には終了条件が必要です

ディープコピーとシャローコピー:

1. 浅いコピー: 最上位層のみがコピーされ、深層オブジェクトのアドレスのみがコピーされるため、元の深層データに変更があると、コピーされた深層データにも変更が加えられる。

オブジェクトを割り当てます(objNew、objOld)

2. ディープコピー: すべてのディープデータ値を新しいオブジェクトにコピーします。新しいオブジェクトと古いオブジェクトのデータ変更は相互に影響しません。

以下もご興味があるかもしれません:
  • フロントエンドの上級者向けコースでは、JavaScript のストレージ機能の使い方を学習します。
  • JS 配列の高度な例 [いくつかの配列関数の使用法]
  • 高度な JS 関数継承の使用例の分析
  • 高度な JS 関数プロトタイプの使用例の分析
  • JavaScript の分割関数と結合関数の高度な使用方法のヒント

<<:  5分でDockerを使ってRedisのクラスターモードとセンチネルモードを構築する方法を教えます

>>:  CSS 要素の非表示の原則と display:none および visibility:hidden

推薦する

美しい FLASH ウェブサイト デザイン例 50 選

Flashにより、デザイナーや開発者はブラウザ上でリッチなコンテンツを提供し、動き、インタラクティブ...

有名なブログの再設計例 28 件

1. Webデザイナーウォール 2. Veerleのブログ 3. チュートリアル9 4. UXブース...

HTMLはBaidu百科事典のナビゲーションドロップダウンメニュー機能を模倣します

HTML は、Baidu 百科事典のナビゲーション ドロップダウン メニュー機能を模倣します。具体的...

Tomcat をサービスとして登録する際に注意すべき点のまとめ

Tomcat をサービスとして登録する場合の注意点は次のとおりです。 インターフェースを開いたら、以...

MySQL ビューの原理と使用法の詳細な分析

序文: MySQL では、ビューはおそらく最も一般的に使用されるデータベース オブジェクトの 1 つ...

イメージのパッケージ化とワンクリック展開を実現するためにDockerを組み合わせたアイデア

1. サーバーにDockerをインストールする yumでdockerをインストール設定ファイルを変更...

Reactソースコードにおけるビット演算について詳しく説明します

目次序文いくつかの一般的なビット操作ビットAND (&)ビットOR (|)ビット否定(~)マ...

表に斜めヘッダー効果を出す5つの方法

誰もがテーブルをよく知っているはずです。コード内でよく見かけます。テーブルにスラッシュ ヘッダーを追...

MySQLデータストレージプロセスパラメータの詳細な例

MySQL ストアド プロシージャ パラメータには、in、out、inout の 3 種類があります...

JavaScript Reduceの詳しい説明

目次地図フィルターいくつかの毎インデックスを検索パイプ参考回答1. パラメータを受け入れる関数を返す...

Bツリーの特性の紹介

B ツリーは一般的なデータ構造です。彼と一緒にB+ツリーがあります。ここで、概念を明確にする必要があ...

MySQLトリガーの使用と理解

目次1. トリガーとは何ですか? 2. トリガーを作成するトリガーを作成するための構文は次のとおりで...

60件のページング事例と優れた実践例を推奨

<br />構造と階層により複雑さが軽減され、読みやすさが向上します。記事やサイトが整理...

docker.service 起動エラーの詳細なトラブルシューティング

エラーを報告するには次のコマンドを実行しますsystemctl dockerを再起動しますエラーメッ...

データベースSQL文の最適化

最適化する理由:実際のプロジェクトが開始され、データベースが一定期間稼働した後、初期のデータベース設...