JavaScriptの言語の本質 - 読書ノート(2)

第四章機能

機能が実装基本単位関数であり、関数は、単純な関数であるべきである。プログラミングは、関数とデータ構造のセットに要求のスキルセットを分解することです。内部関数で複数の機能を実装することは避けてください。

最終的にはプロトタイプチェーンリンクを介してのObject.prototypeし、関数式は、関数、Function.prototypeへのリンクを作成し使用して、リテラルのObject.prototypeを作成するために、リンク機能を使用してください。

あなたが関数を作成した後、それは、その値が関数の目的であるconstructorプロパティを持つprototypeプロパティを持つことになります。

機能は、他の部分から呼び出すことができます。

定義関数

機能の4:関数、関数名(匿名関数)、関数のパラメータ(パラメータ、パラメータ、オプション)、その機能。関数は、関数または戻り値の引数かもしれません。関数は内部変数およびパラメータにアクセスすることができ、変数およびパラメータは、親関数の外にアクセスすることができます。閉鎖機能。

関数の呼び出し

(括弧内)の着信のパラメータに加えて通話中に機能、これをさらにデフォルトと引数(引数)(この関数の値に応じて通話モードの4種類)を渡します。引数がパラメータよりも大きい場合、引数はすべて、現在の関数の引数を格納します。

引数は不確実性関数パラメータ(又は複数のパラメータ)の回で使用することができる擬似引数配列である、配列が制限されているメソッドを持っていません。

let sum = function() {
  let sum = 0;
  for (let i = 0; i < arguments.length; i ++) {
    sum += arguemnts[i];
  }
  return sum;
};
通話モード機能4種類の

1、メソッド呼び出しモード

目的関数の方法として。これは、このオブジェクトを指します。これにより、関数は内部オブジェクトのパブリック・アクセス・メソッドとプロパティようなものであってもよいです。

let myObject = {
  value: 0,
  increase = (inc) => {
  	this.value += typeof inc === 'number' ? inc : 1;
	} 
};
// 如果传入的参数是数值,函数的value属性叠加,不是数值就 + 1;
myObject.increase('test');
myObject.increase(2);
console.log(myObject.value === 3);

2、関数呼び出しモード

これは方法の関数としてオブジェクトと呼ばれていないが、関数の形が呼び出されるように、これはグローバル変数を指します。

let myObject = {
  value = 3;
}
myObject.double = function () {
  let that = this;
  let helper = function () {
    that.value = add(that.value, that.value);
    console.log(this); //全局变量
  };
  helper(); //以函数的形式调用函数 helper
}
myObject.double();
console.log(myObject.value);

3、コンストラクタ呼び出しモード

新しいコンストラクタを使用して関数を作成し、この関数は、新しく作成されたオブジェクトにバインドされています。(コンストラクタメソッドを使用して新しいオブジェクトを作成すると、早い、そして今クラスでJSを作成するために、classキーワードを使用します)。この方法では、最新のコードでは使用されません。

let Quo = function (string) {
  this.status = sy=tring;
}
Quo.prototype.getStatus = function() {
  return this.status;
}
let myQuo = new Quo("test");
myQue.getStatue();

最初のパラメータを適用するために、この点、第2のパラメータは、パラメータ配列である(比較メソッド呼び出しを使用して):4、通話モードを適用します。

let array = [3, 4];
let sum = add.apply(null, array);
console.log(sum === 7);

let statusObject = {
  status: "OK"
};
let status = Quo.prototype.getStatus.apply(statusObject);
console.log(status === 'OK');

機能遭遇したリターンは、コードの後ろに続行されません。

例外処理

例外:事故時の正常な機能を妨げるが実行される(数値パラメータを渡す必要がある機能は、実際には、渡された文字列パラメータが)、そのような事故は、プログラムが例外をスローする必要があるときにことがわかりました。

throw文は、関数の実行を中断し、オブジェクトは、例外がスローされます:名前が異常な異常な属性とメッセージの説明属性。

例外はのtry-catchをキャプチャすることができます。コードは、関数が実行されたステートメントをキャッチするためにジャンプします、例外はtry文を捕獲している生成しました。try文はキャッチすべての例外のcatch(TRY一つだけキャッチ)を持つことができます

手段は、異常が異常の種類に依存解決する場合、異常な検査は、例外のタイプを決定するために、異常な構成Nameプロパティをチェックします。

function add = (a, b) => {
  if (typeof a !== 'number' || typeof b !== 'number') {
    throw {
      name: 'TypeError',
      message: 'add function needs number'
    };
  }
  return a + b;
}
function tryIt = function() {
  try {
    add("ten", 20);
  }
  catch (e) {
    console.log(e);
  }
}
再帰

ドムはより多くの再帰的なツリー構造を使用します。

let walk_the_dom = fucntion walk (node,func) {
  // 把节点和处理的函数传入,对当前节点进行处理;
  func(node);
  node = node.firstChild;
  while (node) {
    // 遍历每一个子节点,并递归处理
    walk(node, func);
    node = node.nextSibling;
  }
};

let getElementsByAttribute = function (att, value) {
  let results = [];

  walk_the_dom(document.body, fucntion(node) {
    let actual = node.nodeType === 1 && node.getAttribute(att);
    if (typeof actual === 'string' && (actual === value || typeof value !== 'string')) {
      results.push(node);
    }
  });
  return results;
}

スコープ

ES6は、ブロックレベルの範囲でした。

クロージャ

統合する必要性

第V章の継承

統合する必要性

おすすめ

転載: blog.csdn.net/weixin_41697143/article/details/90706246