函数的其它成员
- arguments
- caller
- length
- name
function fn(x, y, z) {
console.log(fn.length)
console.log(arguments)
console.log(arguments.callee === fn)
console.log(fn.caller)
console.log(fn.name)
}
function f() {
fn(10, 20, 30)
}
f()
高阶函数
作为参数
function eat (callback) {
setTimeout(function () {
console.log('吃完了')
callback()
}, 1000)
}
eat(function () {
console.log('去唱歌')
})
作为参数案例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>title</title>
<script>
function f1(fn) {
setInterval(function () {
console.log("定时器开始");
fn();
console.log("定时器结束");
},2000);
}
f1(function () {
console.log("好困啊,好累啊,就是想睡觉");
});
</script>
</head>
<body>
</body>
</html>
作为返回值
function genFun (type) {
return function (obj) {
return Object.prototype.toString.call(obj) === type
}
}
var isArray = genFun('[object Array]')
var isObject = genFun('[object Object]')
console.log(isArray([]))
console.log(isArray({}))
作为返回值案例:
在这里插入代码片<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>title</title>
<script>
function File(name, size, time) {
this.name = name;
this.size = size;
this.time = time;
}
var f1 = new File("a", "400M", "1997-12-12");
var f2 = new File("c", "200M", "2017-12-12");
var f3 = new File("b", "800M", "2010-12-12");
var arr = [f1, f2, f3];
function fn(attr) {
return function getSort(obj1, obj2) {
if (obj1[attr] > obj2[attr]) {
return 1;
} else if (obj1[attr] == obj2[attr]) {
return 0;
} else {
return -1;
}
}
}
var ff = fn("name");
arr.sort(ff);
for (var i = 0; i < arr.length; i++) {
console.log(arr[i].name + "====>" + arr[i].size + "===>" + arr[i].time);
}
</script>
</head>
<body>
</body>
</html>