<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>code</title>
</head>
<body>
</body>
<script>
var a = 1;
function b() {
var a = 2;
function c() {
console.log(this.a);
console.log(a)
}
return c;
}
b()(); // 1 2
var obj = {
a: 3,
b: function () {
console.log(a)
console.log(this.a)
}
};
var a = 4;
var objb = obj.b;
obj.b() // 4 3
objb() // 44
obj.b.call(window) // 44
// 递归求1,2,3,...n...,3,2,1和
function foo(n) {
if (n < 2) {
return 1;
} else if (n >= 2) {
return n + foo(n - 1) + (n - 1);
}
}
console.log(foo(4))
// aaa=111&bbb=222&ccc=333 转为对象
var str = "aaa=111&bbb=222&ccc=333", obj = {};
var arr = str.split("&")
for (var i = 0; i < arr.length; i++) {
var arr2 = arr[i].split("=")
obj[arr2[0]] = arr2[1];
}
console.log(obj)
// 自执行函数会产生闭包
var obj = {
name: " jsCoder",
skill: ["css3", "html5", "es6", "react", "angular"],
say: function () {
for (var i = 0, len = this.skill.length; i < len; i++) {
(function () {
var temp = i;
setTimeout(function () {
console.log("No." + temp + obj.name);
console.log(obj.skill[temp]);
console.log('--------------------------');
}, 100);
})();
}
}
};
obj.say();
// 数组降低维度,然后去重,排序
var arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
var newArray = [];
function getArray(array) {
array.forEach((item, index) => {
if (typeof item === 'object') {
getArray(item)
} else {
newArray.push(item)
}
})
}
getArray(arr);
console.log(newArray);
// 去重
Array.prototype.distinct = function () {
var arr = this,
obj = {},
result = [];
arr.forEach((item, index) => {
if (!obj[arr[item]]) {
obj[arr[item]] = 1
result.push(arr[item])
}
})
return result;
};
result = newArray.distinct().sort(function (a, b) {
return a - b;
});
console.log(result)
// 深拷贝
function deepclone(p, s) {
var s = s || {};
for (var prop in p) {
if (typeof p[prop] == "object") {
s[prop] = (p[prop].constructor === "Array") ? [] : {};
deepclone(p[prop], s[prop]);
} else {
s[prop] = p[prop];
}
}
return s;
}
// promise 用法,以次输出 0 1 2 3 4 5
const tasks = []; // 这里存放异步操作的 Promise
const output = (i) => new Promise((resolve) => {
setTimeout(() => {
console.log(new Date, i);
resolve();
}, 1000 * i);
});
// 生成全部的异步操作
for (var i = 0; i < 5; i++) {
tasks.push(output(i));
}
// 异步操作完成之后,输出最后的 i
Promise.all(tasks).then(() => {
setTimeout(() => {
console.log(new Date, i);
}, 1000);
});
</script>
</html>