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

推薦する

Nginx ロケーション設定のチュートリアル (ゼロから)

基礎位置の一致順序は、「最初に正規表現に一致し、次に共通表現に一致」です。実際のロケーションの一致順...

HTML ハイパーリンクの詳細な説明

ハイパーリンクハイパーリンクは、Web サイト上のすべてのページがハイパーリンクで接続され、ページ間...

MySQLデータ移行の概要

目次序文: 1. データ移行について2. 移行計画と留意点要約:序文:日常業務では、テーブル、データ...

LinuxはMySQLデータベースの自動バックアップとスケジュールバックアップを毎日実装しています

概要バックアップは災害復旧の基礎であり、システム操作エラーやシステム障害によるデータ損失を防ぐために...

Nginx try_files ディレクティブの使用例

Nginx の設定構文は柔軟で、高度に制御可能です。バージョン 0.7 以降では、try_files...

CSS エラスティック ボックス flex-grow、flex-shrink、flex-basis の詳細な説明

3 つの属性 flex-grow、flex-shrink、flex-basis の機能は次のとおりで...

Dockerのyumソースの設定とCentOS7へのインストールの詳細な説明

ここではCentOS7が使用されており、カーネルバージョンは [root@localhost ~]#...

Layuiはログインインターフェース検証コードを実装します

この記事の例では、ログインインターフェース検証コードを実装するためのlayuiの具体的なコードを参考...

vue シンプルメモ帳開発の詳しい説明

この記事では、参考までにEasy Notepadを実装するためのVueの具体的なコードを紹介します。...

CSS3 タイムラインアニメーション

成果を達成する html <h2>CSS3 タイムライン</h2> <...

MySQL 8.0.13 のインストールと設定のグラフィックチュートリアル

Msyqlデータベースのインストール、参考までに具体的な内容は次のとおりです。 ①ブラウザでhttp...

Ubuntu環境でのPHP関連のパスと変更方法

Ubuntu環境におけるPHP関連パスPHP パス /usr/bin/php phpize5 /us...

CSS3 アニメーション ボールローリング JS コントロールアニメーション一時停止

CSS3 はアニメーションを作成でき、多くの Web ページのアニメーション画像、Flash アニメ...

HTML でカスタム画像を使用してチェックボックスを表示する方法

チェックボックスの使用を実装するために画像を使用する必要がある場合は、それを使用して実装できます。実...

Vue vee-validateプラグインの簡単な使い方

目次1. インストール2. インポート3. 検証ルールを定義します(エクスポート用に js ファイル...