JavaScript day5
序文
この記事では、主に引数の使用、関数、オブジェクトなどのカプセル化について説明します。
提示:以下是本篇文章正文内容,下面案例可供参考
まず、引数の使用
1.関数のみにargumentsオブジェクトがあり、各関数には組み込みのargumentsオブジェクトがあります。2。Argumentsには
、渡されたすべての引数が格納され
ます。3.引数は疑似配列と呼ばれます。
1.引数と配列の違い
1.配列要素の長さプロパティを持っています;
2。インデックスに従って配列と同じ方法で格納されます;
3。実際の配列のいくつかのメソッドを持っていません;pop()、push()など、など;
// arguments 的使用 只有函数才有 arguments对象 而且是每个函数都内置好了这个arguments
// 作用: 里面存储了所有传递过来的实参
function fn() {
// console.log(arguments); // 里面存储了所有传递过来的实参 arguments = [1,2,3]
// console.log(arguments.length);
// console.log(arguments[2]);
// 我们可以按照数组的方式遍历arguments
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
fn(1, 2, 3);
fn(1, 2, 3, 4, 5);
// 伪数组 并不是真正意义上的数组
// 1. 具有数组的 length 属性
// 2. 按照索引的方式进行存储的
// 3. 它没有真正数组的一些方法 pop() push() 等等
2.引数を使用して、配列の要素を逆にします。
注:次の入力配列要素の場合、引数の場合、受信した要素の数は1です。受信した配列要素の内部データを操作するには、arguments [0]が必要です。最初に配列要素を取得してから、次の操作を実行します。配列要素上。;
function reverse () {
var newArr = [];
for(var i = arguments[0].length - 1 ; i >= 0; i--){
newArr[newArr.length] = arguments[0][i];
}
return newArr;
}
console.log(reverse([1,2,3,4,5]));
2.関数のカプセル化
コードによって実装される関数の使用を容易にするために、returnを使用して特定の関数を実装するコードフラグメントを関数にカプセル化でき、それを使用するたびに、正式なパラメーターを直接渡して関数を呼び出すことができます。
2.1パックドアレイフリップ
配列要素の反転を実装します。
コードは次のとおりです(例)。
function reverse (arr){
var newArr = [];
for(var i = arr.length - 1; i >= 0; i--){
newArr[newArr.length] = arr[i];
}
return newArr;
}
console.log(reverse([1,2,3,4,5]));
2.2カプセル化バブルソート
入力配列要素の内部要素を小さいものから大きいものへ、または大きいものから小さいものへと配置します。
コードは次のとおりです(例):
function sort(arr){
for(var i = 0 ;i < arr.length - 1; i++){
for(var j = 0 ;j < arr.length - i -1; j++){
if(arr[j] > arr[j+1]){
var temp = 0;
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
console.log(sort([1,4,6,2,8,0]));
2.3うるう年プログラムを判断するためのカプセル化
うるう年:4で割り切れるが、100で割り切れない、または400で割り切れる
コードは次のとおりです(例):
//闰年:能被4整除且不能被100整除,或能被400整除
function isRunYear(year){
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
console.log(isRunYear(2000));
3.関数が別の関数を呼び出す
関数内では、別の定義済み関数を呼び出すことができます。
コードは次のとおりです(例):
//在函数内部是可以调用另一个函数
function fn1() {
console.log(11);
fn2(); // 在fn1 函数里面调用了 fn2 函数
}
fn1();
関数宣言の4、2つの方法
4.1functionキーワードは関数を宣言します
コードは次のとおりです(例):
// 1. 利用函数关键字自定义函数(命名函数)
function fn() {
}
4.2関数式
匿名関数を変数に渡すために変数を宣言します;変数が値を格納し、関数式が関数を格納することを除いて、関数式は変数と同じ方法で宣言されます;
コードは次のとおりです(例):
// 2. 函数表达式(匿名函数)
// var 变量名 = function() {};
var fun = function(aru) {
console.log('我是函数表达式');
console.log(aru);
}
fun('老师');
// (1) fun是变量名 不是函数名
// (2) 函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值 而 函数表达式里面存的是函数
// (3) 函数表达式也可以进行传递参数
5. JavaScriptスコープ(ES6より前)
5.1スコープの役割
スコープは、コードの信頼性を確保するために、コード内の変数のスコープを制限します。同じ変数名で、異なるスコープで名前の競合が発生することはありません。
注:ES6にはブロックレベルのスコープしかありません。
5.1スコープの種類
5.1.1グローバルスコープ
スクリプトタグ全体と個々のjsファイルはグローバルスコープにあります
。ローカルスコープの変数はグローバルスコープではアクセスできません。
5.1.2ローカルスコープ
関数内にはローカルスコープがあります。
コードは次のとおりです(例)。
次の関数の内側のnum1と外側のnum1には、名前の競合はありません。
var num1 = 10;
function fun(aru) {
var num1 = 10; // num1就是局部变量 只能在函数内部使用
num2 = 20;
}
fun();
6.変数の種類
6.1グローバル変数
グローバルスコープ内の変数。
注:1。関数内で宣言されていない変数もグローバル変数です
。2。外部スコープ内の変数は内部スコープ内ではアクセスできません。
6.2ローカル変数
ローカルスコープ内の変数はローカル変数と呼ばれます。
注:1。関数の仮パラメーターはローカル変数とも呼ばれます
。2。内部関数は外部関数の変数にアクセスできます。
7.JavaScriptスコープチェーン
スコープチェーン:内部関数が外部関数の変数にアクセスするとき、近接性の原理を採用し、内部関数に最も近い変数の値を選択します。
コードは次のとおりです(例):
var num = 10;
function fn() {
// 外部函数
var num = 20;
function fun() {
// 内部函数
console.log(num);
}
fun();
}
fn();
8.JavaScriptの事前解析
jsエンジンには、jsコードを実行するための2つのステップがあります。1。事前解析2.jsコードを実行します。
8.1準備のステップ
8.1.1可変プロモーション
変数の昇格は、すべての変数宣言を現在のスコープの前に昇格させることです。注:代入操作は昇格されません。!!
8.1.2機能ホイスト
関数のホイストとは、すべての関数宣言を現在のスコープの前にホイストすることです。注:関数呼び出しはホイストされません。!!
コードは次のとおりです(例):
fun(); // 报错 坑2
var fun = function() {
console.log(22);
}
// 函数表达式 调用必须写在函数表达式的下面
// 相当于执行了以下代码
// var fun;
// fun();
// fun = function() {
// console.log(22);
// }
9.オブジェクト
オブジェクトは、プロパティとメソッドの順序付けられていないコレクションです。
9.1オブジェクトの作成方法
9.1.1オブジェクトリテラルはオブジェクトを作成します
コードは次のとおりです(例):
// 1.利用对象字面量创建对象 {}
// var obj = {}; // 创建了一个空的对象
var obj = {
uname: '张三疯',
age: 18,
sex: '男',
sayHi: function() {
console.log('hi~');
}
}
// (1) 里面的属性或者方法我们采取键值对的形式 键 属性名 : 值 属性值
// (2) 多个属性或者方法中间用逗号隔开的
// (3) 方法冒号后面跟的是一个匿名函数
9.1.2新しいキーワードはオブジェクトを作成します
newキーワードで作成されたオブジェクトは、オブジェクトにプロパティとメソッドを追加するときに、割り当てメソッドを直接使用します。
コードは次のとおりです(例):
// 利用 new Object 创建对象
var obj = new Object(); // 创建了一个空的对象
obj.uname = '张三疯';
obj.age = 18;
obj.sex = '男';
obj.sayHi = function() {
console.log('hi~');
}
// (1) 我们是利用 等号 = 赋值的方法 添加对象的属性和方法
// (2) 每个属性和方法之间用 分号结束
console.log(obj.uname);
console.log(obj['sex']);
obj.sayHi();
var obj1 = new Object();
obj1.uname = 'mingren'
obj1.age = '18';
obj1.fn1 = function(){
console.log('我是名人');
}
obj1.fn1();
9.1.3コンストラクターはオブジェクトを作成します
コンストラクターは、オブジェクトを関数にカプセル化することです。コンストラクター内のオブジェクトのプロパティとメソッドをthisキーワードで追加する必要があり、コンストラクターが呼び出されたときに、新しいキーワードを追加する必要があります。
コードは次のとおりです(例):
// function 构造函数名() {
// this.属性 = 值;
// this.方法 = function() {}
// }
// new 构造函数名();
注:コンストラクターはオブジェクトを自動的に返します。返す必要はありません。
9.2オブジェクトの使用方法
9.2.1オブジェクトプロパティの呼び出し
方法1:
コードは次のとおりです(例):
// (1). 调用对象的属性 我们采取 对象名.属性名 . 我们理解为 的
console.log(obj.uname);
方法2:
コードは次のとおりです(例):
// (2). 调用属性还有一种方法 对象名['属性名']
console.log(obj['age']);
9.2.2オブジェクト内のメソッドの呼び出し
コードは次のとおりです(例):
(3) 调用对象的方法 sayHi 对象名.方法名()
obj.sayHi();
注:オブジェクト内でメソッドを呼び出すときは、()を追加することを忘れないでください!!!
9.3オブジェクトと変数および関数の内部プロパティとメソッドの違い
9.3.1プロパティと変数の違い
変数:1。変数は個別に宣言され、割り当てられます。2.変数は単独で存在し、変数名は使用時に直接参照されます。
属性:1。属性は宣言する必要はなく、存在するオブジェクトに依存します。2.使用する場合は、次のようにする必要があります。object.attribute name;
9.3.2メソッドと関数の違い
類似点:それらはすべて、特定の関数を実現するために特定のコードを実行します。
類似点と相違点:関数は個別に宣言および呼び出され、メソッドは関数内にあり、存在するオブジェクトに依存します。新しいキーワードを追加する必要があります。電話するとき;
コードは次のとおりです(例):
// 变量、属性、函数、方法的区别
// 1.变量和属性的相同点 他们都是用来存储数据的
var num = 10;
var obj = {
age: 18,
fn: function() {
}
}
function fn() {
}
console.log(obj.age);
// console.log(age);
// 变量 单独声明并赋值 使用的时候直接写变量名 单独存在
// 属性 在对象里面的不需要声明的 使用的时候必须是 对象.属性
// 2. 函数和方法的相同点 都是实现某种功能 做某件事
// 函数是单独声明 并且调用的 函数名() 单独存在的
// 方法 在对象里面 调用的时候 对象.方法()
9.4オブジェクトの新しいキーワードの実行プロセス
コードは次のとおりです(例):
// new关键字执行过程
// 1. new 构造函数可以在内存中创建了一个空的对象
// 2. this 就会指向刚才创建的空对象
// 3. 执行构造函数里面的代码 给这个空对象添加属性和方法
// 4. 返回这个对象
function Star(uname, age, sex) {
this.name = uname;
this.age = age;
this.sex = sex;
this.sing = function(sang) {
console.log(sang);
}
}
var ldh = new Star('刘德华', 18, '男');
9.5オブジェクトのトラバース
オブジェクトのトラバースは、オブジェクトのプロパティとメソッドを反復処理するのと似ています。
コードは次のとおりです(例):
// 遍历对象
var obj = {
name: 'pink老师',
age: 18,
sex: '男',
fn: function() {
}
}
// console.log(obj.name);
// console.log(obj.age);
// console.log(obj.sex);
// for in 遍历我们的对象
// for (变量 in 对象) {
// }
for (var k in obj) {
console.log(k); // k 变量 输出 得到的是 属性名
console.log(obj[k]); // obj[k] 得到是 属性值
}
// 我们使用 for in 里面的变量 我们喜欢写 k 或者 key