JavaScript Memo(三)
5371 ワード
JavaScript Memo(二)において、条件判断とサイクルを理解しました.関数と方法を見てみましょう.
関数
定義関数
JavaScriptの関数もオブジェクトです.以下に定義されるabs関数は、実際には関数オブジェクトです.関数名absは、関数を指す変数と見なされます.
JavaScriptは、呼び出しに影響を与えずに任意のパラメータに入ることができます.したがって、入力されたパラメータは定義されたパラメータよりも多くても大丈夫です.関数の内部にはこれらのパラメータが必要ではありません.変数が関数の内部で説明されると、その変数の作用領域は関数全体であり、関数の外では変数 を参照することができない. JavaScriptの関数は入れ子可能であり、内部関数は外部関数によって定義された変数 にアクセスすることができる.
グローバルスコープ
どの関数でも定義されていない変数はグローバルスコープを持っています.JavaScriptはデフォルトではグローバルオブジェクトwindowがあります.グローバルスコープの変数は実際にwindowの属性に結び付けられています.
名前空間
グローバル変数はwindowに結合されます.JavaScriptファイルが同じグローバル変数を使用している場合、または同じ名前のトップ関数を定義している場合、名前が衝突します.衝突を減らす方法の一つは、自分のすべての変数と関数を一つの大域変数に結びつけることです.
varとletが明らかにしたのは変数です.もし一つの定数を説明するなら、ES 6の前ではだめです.ES 6標準は新しいキーワードconstを導入して定数を定義します.
オブジェクトに結合された関数を方法と呼び、常に現在のオブジェクトを指す特殊な変数です.
JavaScriptの関数は実はすべてある変数を指しています.変数が関数を指すことができるので、関数のパラメータが変数を受け取ることができます.一つの関数はパラメータとして別の関数を受け取ることができます.この関数は高次関数と呼ばれます.
Arayのmap()メソッドを呼び出して、私達自身の関数に入ってきて、結果として新しいArayを得ました.
reduce()Arayの[x 1,x 2,x 3…]に関数を作用させ、結果を連続してシーケンスの次の要素と累積計算を行う
Arayのいくつかの要素をフィルタリングし、残りの要素を返します.
Arayのfilter()は、関数を受信し、導入された関数を各要素に順次作用させ、戻り値がtrueかfalseかによって、その要素を保留するかそれとも廃棄するかを決定する.
sort()メソッドはデフォルトではすべての要素をStringに変換して並べ替えます.sort()方法は直接Arayを修正します.その結果はまだArayです.
ES 6規格に新たな関数が追加されました.アルロW Function(矢印関数)の定義は矢印です.
関数
定義関数
JavaScriptの関数もオブジェクトです.以下に定義されるabs関数は、実際には関数オブジェクトです.関数名absは、関数を指す変数と見なされます.
function abs(x) {
if (x >= 0) {
return x;
} else {
return -x;
}
}
function ;
abs ;
(x) , , ;
{ ... } , ,
関数を呼び出すJavaScriptは、呼び出しに影響を与えずに任意のパラメータに入ることができます.したがって、入力されたパラメータは定義されたパラメータよりも多くても大丈夫です.関数の内部にはこれらのパラメータが必要ではありません.
abs(10, 'blablabla'); // 10
abs(-9, 'haha', 'hehe', null); // 9
abs(); // NaN
argmentsは関数の内部でのみ機能し、現在の関数の使用者からのすべてのパラメータを常に指し示し、argmentsを利用して、調整者からのすべてのパラメータを得ることができます.function abs() {
if (arguments.length === 0) {
return 0;
}
var x = arguments[0];
return x >= 0 ? x : -x;
}
abs(); // 0
abs(10); // 10
abs(-9); // 9
変数のスコープ'use strict';
function foo() {
var x = 1;
function bar() {
var x = 'A';
alert('x in bar() = ' + x); // 'A'
}
alert('x in foo() = ' + x); // 1
bar();
}
JavaScriptの関数定義には特徴があります.まず関数全体の語句をスキャンして、説明したすべての変数を関数の上に「昇格させる」という特徴があります.function foo() {
var x = 'Hello, ' + y;
alert(x);
var y = 'Bob';
}
//
function foo() {
var y; // y
var x = 'Hello, ' + y;
alert(x);
y = 'Bob';
}
文var x='Hello、'+y;エラーではないです.変数yは後で申明します.しかし、alertはハロー、undefinedを表示し、変数yの値はundefinedであると説明しています.これはJavaScriptエンジンが変数yの宣言を自動的に引き上げたためですが、変数yの割当値は上がりません.グローバルスコープ
どの関数でも定義されていない変数はグローバルスコープを持っています.JavaScriptはデフォルトではグローバルオブジェクトwindowがあります.グローバルスコープの変数は実際にwindowの属性に結び付けられています.
var course = 'Learn JavaScript';
alert(course); // 'Learn JavaScript'
alert(window.course); // 'Learn JavaScript'
JavaScriptは実際にはグローバルスコープしかありません.任意の変数(関数も変数として扱われます)が、現在の関数のスコープ内に見つからない場合は、上に検索を続けます.最後にグローバルスコープ内にも見つからない場合は、ReferenceErrエラーを報告します.名前空間
グローバル変数はwindowに結合されます.JavaScriptファイルが同じグローバル変数を使用している場合、または同じ名前のトップ関数を定義している場合、名前が衝突します.衝突を減らす方法の一つは、自分のすべての変数と関数を一つの大域変数に結びつけることです.
// MYAPP:
var MYAPP = {};
// :
MYAPP.name = 'myapp';
MYAPP.version = 1.0;
// :
MYAPP.foo = function () {
return 'foo';
};
定数varとletが明らかにしたのは変数です.もし一つの定数を説明するなら、ES 6の前ではだめです.ES 6標準は新しいキーワードconstを導入して定数を定義します.
const PI = 3.14;
PI = 3; // , !
PI; // 3.14
方法オブジェクトに結合された関数を方法と呼び、常に現在のオブジェクトを指す特殊な変数です.
function getAge() {
var y = new Date().getFullYear();
return y - this.birth;
}
var xiaoming = {
name: ' ',
birth: 1990,
age: getAge
};
xiaoming.age(); // 25,
getAge(); // NaN
高次関数JavaScriptの関数は実はすべてある変数を指しています.変数が関数を指すことができるので、関数のパラメータが変数を受け取ることができます.一つの関数はパラメータとして別の関数を受け取ることができます.この関数は高次関数と呼ばれます.
function add(x, y, f) {
return f(x) + f(y);
}
add(-5, 6, Math.abs);//11
map関数Arayのmap()メソッドを呼び出して、私達自身の関数に入ってきて、結果として新しいArayを得ました.
function pow(x) {
return x * x;
}
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]
レデュース関数reduce()Arayの[x 1,x 2,x 3…]に関数を作用させ、結果を連続してシーケンスの次の要素と累積計算を行う
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
.var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
return x + y;
}); // 25
[1, 3, 5, 7, 9] 13579
var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
return x * 10 + y;
}); // 13579
filter関数Arayのいくつかの要素をフィルタリングし、残りの要素を返します.
Arayのfilter()は、関数を受信し、導入された関数を各要素に順次作用させ、戻り値がtrueかfalseかによって、その要素を保留するかそれとも廃棄するかを決定する.
// Array , ,
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
return x % 2 !== 0;
});
r; // [1, 5, 9, 15]
// Array
var r,arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
r = arr.filter(function (element, index, self) {
return self.indexOf(element) === index;
});
ソト関数sort()メソッドはデフォルトではすべての要素をStringに変換して並べ替えます.sort()方法は直接Arayを修正します.その結果はまだArayです.
['Google', 'Apple', 'Microsoft'].sort(); // ['Apple', 'Google', 'Microsoft'];
['Google', 'apple', 'Microsoft'].sort(); // ['Google', 'Microsoft", 'apple']
[10, 20, 1, 2].sort(); // [1, 10, 2, 20]
sort()メソッドも高次関数であり、比較関数を受信してカスタマイズした並べ替えを実現することができます.var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
}); // [1, 2, 10, 20]
Arow FunctionES 6規格に新たな関数が追加されました.アルロW Function(矢印関数)の定義は矢印です.
x => x * x
function (x) {
return x * x;
}
// :
(x, y) => x * x + y * y
// :
() => 3.14
// :
(x, y, ...rest) => {
var i, sum = x + y;
for (i=0; i