Javascriptデフォルト(2)
54574 ワード
▼▼▼▼▼map()実施
// definition
Array.prototype.myMap = function(callback) {
arr = [];
for (var i = 0; i < this.length; i++)
arr.push(callback(this[i], i, this));
return arr;
};
//tests
var arrs = ['dic tanin', 'boo radley', 'hans gruber'];
var numbers2 = [1, 4, 9];
var goodT = arrs.myMap(function(n) {
return n; // arrs배열을 mymap함수에 적용시킨다.
});
var squareRoot = numbers2.myMap(function(num) {
return Math.sqrt(num); // 제곱근을 구하는 함수 생성
});
console.log(goodT); // [ 'dic tanin', 'boo radley', 'hans gruber' ]
console.log(squareRoot); // [ 1, 2, 3 ]
実行コンテキストを理解するJavaScript操作手順
割当て
▼♂変数初期化プロセス
宣言
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
console.log("1");
function exec() {
setTimeout(function() {
console.log("2");
}, 3000);
setTimeout(function() {
console.log("3");
}, 0);
console.log("4");
setTimeout(function() {
console.log(5);
}, 1000);
}
console.log(exec());
// 위 코드 실행 결과 : 1, 4, 3, 5, 2
settimeoutの遅延が0であっても、実行コンテキストが異なるため、まず1、4が出力されます.
for文系settimeout
var i;
for (i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i); // 5, 5, 5, 5, 5
}, 1000);
}
▼▼♂argumentsオブジェクト
// 아래 함수 정의에 포함된 인자 값은 2개
function add(a, b) {
console.dir(arguments);
}
console.log(add(1)); // Arguments(1), 0: 1
console.log(add(1, 2)); // Arguments(2), 0: 1, 1: 2
console.log(add(1, 2, 3)); // Arguments(3), 0: 1, 1: 2, 2: 3
function sum() {
for (var i = 0, result = 0; i < arguments.length; i++) {
result += arguments[i];
}
return result;
}
console.log(sum(1,2,3)); // 6
console.log(sum(1,2,3,4,5,6)); // 21
注:パラメータにはlengthプロパティとargument[i]と同じインデックスがありますが、配列ではありません.これらのオブジェクトは、類似配列のオブジェクト(array-like-object)と呼ばれます.
⛹️♂️ apply() & call()
// apply() 적용 전
function sum() {
console.log("arguments length : " + arguments.length);
arguments.push(100); // Uncaught TypeError: arguments.push is not a function
console.dir(arguments); // Arguments(3)
}
sum(1,2,3);
// 함수명.apply(대상, 인자 배열);
// apply() 적용 후
function sum() {
var args1 = Array.apply(arguments);
args1.push(100); // 0: 100
console.dir(args1); // Array(1)
var args2 = Array.prototype.slice.apply(arguments);
args2.push(100); // 3: 100
console.dir(args2); // Array(4)
}
sum(1,2,3);
function user(firstName, lastName, age) {
this.firstName = firstName;
this.lastName = lastName;
}
user.apply(window, ['kevin', 'durant']); // user.call(window, 'John', 'Doe'); 와 같음
console.log(window.firstName); // 'kevin'
console.log(window.lastName); // 'durant'
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
// 함수 선언식
var text = 'global';
function binding() {
var text = 'local';
console.log(this.text); // 'global'
console.log(this); // Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}
}
binding();
// 함수 표현식
var text = 'global';
var binding = function() {
var text = 'local';
console.log(this.text); // 'global'
console.log(this); // Window {stop: ƒ, open: ƒ, alert: ƒ, confirm: ƒ, prompt: ƒ, …}
}
binding();
var text = 'global';
var binding = {
text: 'local',
printText: function () {
console.log(this.text); // 'local'
console.log(this); // {text: "local", printText: ƒ}
}
};
binding.printText();
var text = 'global';
var binding = {
text: 'local',
printText: function () {
console.log(this.text); // local
var innerFunc = function () {
console.log(this.text); // global
};
innerFunc();
}
};
binding.printText();
▼▼▼▼▼▼▼▼スコフチェーンの理解例
var a = 1;
var b = 2;
function func() {
var a = 10;
var b = 20;
console.log(a); // 10
console.log(b); // 20
}
func();
console.log(a); // 1
console.log(b); // 2
var a = 1;
function func() {
var a = 2;
function innerfunc() {
return a;
}
console.log(innerfunc()); // 2
}
func();
次の例では、func 1の実行コンテキストがグローバルであることに注目します. var a = 1;
function func1() {
return a;
}
function func2(func1) {
var a = 2;
console.log(func1()); // 1
}
func2(func1);
π
function func() {
var a = 1;
var cl = function () {
console.log(a);
};
return cl
}
var result = func();
console.dir(result); // [[Scope]] 에서 Closure 함수임을 확인 가능
result();
var str = [
'hello ',
'',
' world'
];
function completeSentence(name) {
str[1] = name;
return str.join('');
}
completeSentence('js'); //"hello js world"
モジュールをfunction completeSentence(name) {
var str = [
'hello ',
'',
' world'
];
return function () {
str[1] = name;
return str.join('');
};
}
var result = completeSentence('js');
result();
function completeSentence(name) {
var str = [
'hello ',
'',
' world'
];
// 입력된 문자열로 문장을 완성하는 기능
var complete = function () {
str[1] = name;
return str.join('');
};
// 문장 완성 기능을 클로져로 빼는 역할
var closure = function () {
return complete();
};
return closure;
}
var result = completeSentence('js');
result(); // "hello js world"
▼▼▼▼▼▼▼▼▼▼▼▼
// 클로져로 Java 클래스와 유사하게 모듈화한 예제
var Module = (function() {
var privateProperty = 'foo';
function privateMethod(args) {
console.log('private method');
}
return {
publicProperty: '',
publicMethod: function(args) {
console.log("public method"); //undefined
},
privilegedMethod: function(args) {
return privateMethod(args);
}
};
})();
Module.privilegedMethod(); // private method
💪板橋隊長のブログを参考にしました.▼♂▼▼▼▼▼追加学習
**1. join()
:配列内の要素を接続し、値にします.**
構文:var str 1=arr.join();
アレイ内の要素を値にします.エレメントの区分はカンマ(,)で、エレメントの区分を別の文字にする場合は()に希望する文字を入れることができます.
例
<!doctype html>
<html lang="ko">
<head>
<meta charset="utf-8">
<title>JavaScript</title>
</head>
<body>
<script>
var jbAry = [ 'Lorem', 'Ipsum', 'Dolor' ];
var jbStr1 = jbAry.join();
var jbStr2 = jbAry.join( ' / ' );
document.write( '<p>' + jbStr1 + '</p>' );
document.write( '<p>' + jbStr2 + '</p>' );
</script>
</body>
</html>
2. slice()
:beginからendのコピーを新しい配列オブジェクトに返します.つまり、元の配列は変更されません.
startのインデックス
-定義されていない場合は0からslice
-負の値を指定した場合:配列の末尾の長さを表します.slice(-2)は、配列の最後の2つの要素を抽出します.
-指定した配列の長さが等しいかそれ以上の場合:空の配列を返します.
インデックスの終了
-指定されていない場合:スライスをアレイの最後に
-負の値を指定した場合:配列の末尾の長さを表します.slice(2,-1)3番目の要素から2番目の要素へ抽出
-指定した配列の長さが等しいかそれ以上の場合:配列の末尾に抽出
戻り値:抽出要素を含む新しい配列
3. splice()
:アレイ内の既存の要素を削除または置換したり、新しい要素を追加したりして、アレイの内容を変更します.このメソッドは、元の配列自体を変更します.
-構文:splice(start[,deleteCount[,item 1[,item 2[,...]]);
start:配列のインデックスの変更を開始します.
指定した配列の長さが大きい場合:実際の開始インデックスが配列の長さ
deleteCount:配列から削除する要素の数.
省略/値はarrayです.length-startより大きい場合:startから始まるすべての要素を削除します.
item1, item2, ... : 配列に追加する要素.
値が削除されていない場合は、空の配列が返されます.
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var arr1 = arr.splice(10, 2, 'a', 'b', 'c');
console.log(arr); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "a", "b", "c"]
console.log(arr1); // [11, 12]
splice()関数を使用すると、元の配列arrが変更されます.10番目のインデックスから2つの要素を削除し、「a」、「b」、「c」を追加します.
11および12は削除され、これらの削除された要素の配列はarr 1変数に含まれる.
Reference
この問題について(Javascriptデフォルト(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@pji3504/Javascript-기본2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol