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

推薦する

Ubuntu 20.04 は Wi-Fi に接続します (2 つの方法)

最近Ubuntu 20.04をインストールしましたが、Wi-Fiに接続できず、Wi-Fiアイコンも表...

Reactマウスの複数選択機能の設定方法

一般的に、リストには選択機能があり、単一選択、二重選択、複数選択が非常に一般的です。カスタム ループ...

Apache ソースコードのインストールと仮想ホストの設定に関する詳細なチュートリアル

ソースからApacheをインストールする1. Apacheソースコードをアップロードして必要なソフト...

MySQL 最適化接続最適化

記事「MySQL の最適化: キャッシュの最適化」では、システムによってコンパイルされた変数値、また...

Win10の明るさ調整効果を模倣するHTML+CSS+JSサンプルコード

HTML+CSS+JS で Win10 の明るさ調整効果を模倣コード <!doctypehtm...

フロントエンドでよく使われるjs関数メソッド

目次1. メール2. 携帯電話番号3. 電話番号4. URLアドレスですか? 5. 文字列ですか? ...

Linux 仮想マシンの IP アドレスを変更し、ゲートウェイを確認し、ネットワーク環境を構成する方法に関するチュートリアル

仮想マシンの IP アドレスを変更します。 次のインターフェイスに入り、サブネット IP を直接変更...

HTML thead タグの定義と使用法の詳細な紹介

コードをコピーコードは次のとおりです。 <thead> <!– 最初の 2 行をヘ...

dockerを使用してdubboプロジェクトをデプロイする方法

1. まず、Springbootを使用して簡単なDubboテストプログラムを構築し、関連する依存関係...

FileZilla_Server:425 データ接続を開けない問題を解決する方法

FileZilla Serverをサーバーにインストールすると、425データ接続を開けない問題が発生...

Nginx プロセス管理とリロードの原則の詳細な説明

プロセス構造図Nginx はマルチプロセス構造です。マルチプロセス構造は、次のような Nginx の...

Windows (コミュニティ エディション) に MySQL 8.0.18 をインストールするためのチュートリアル

この記事では、Windows で MySQL をインストールする方法について簡単に説明します。他にご...

CSS でホバー ドロップダウン メニューを実装する方法

いつものように、今日は非常に実用的な CSS 効果についてお話します。マウスがボタンに移動すると、ド...

WeChatアプレットでQRコードを識別するために長押しする実装プロセス

序文公式アカウントのQRコードは長押しで認識できることは皆さんご存じですが、ミニプログラムに対する制...