<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<!--这里主要学习函数
函数是对象,函数名为指针
1.函数的3种初始化方式,注意:函数声明会被提升源代码的顶部;
2.函数不支持重载,因为它是对象
3.函数本身可以作为入参;
4.函数的内部属性:
2个对象:arguments和this(调用该函数的对象)
arguments属性: length callee(指向该函数的指针) caller(undefined)
函数名的属性:
caller,如test.caller(表示调用该函数的引用,可以用来查询调用方源码).
目的:加强语言的安全性,不太理解..
length:声明入参的个数
protoType:重点
函数名的方法:
apply:作用:在特定的作用域调用函数,入参 this,arguments对象或者数组
call:作用:在特定的作用域调用函数,入参 this,p1,p2,..,必须明确的传入每一个参数
主要用来扩充作用域
bind:创建一个函数的实例,可以改变全局方法的this
toString(),toLoclString(),valueof返回函数代码
-->
<script type="text/javascript">
//函数声明
function sum (num1,num2) {
return sum1+sum2;
}
//等价
var sum=function (num1,num2) {
return 2*(num1+num2);
}
console.log(sum(1,2));
var sum=new Function('num1','num2','return 3*(num1+num2)');
console.log(sum(1,2));
//函数作为入参,可以用做包装
function sumBao (functionName,argu1,argu2) {
if(functionName){
return functionName(argu1,argu2);
}else{
return undefined;
}
}
//按照指定属性
function sortByPropName (propName) {
var flag;
return function (obj1,obj2) {
if(obj1[propName]>obj2[propName]){
flag=1;
}else if(obj1[propName]<obj2[propName]){
flag=-1;
}else{
flag=0;
}
console.log(flag);
return flag;
}
}
function test () {
//比较器:按照对象的某一个属性比较
var objs=[{name:'G',age:50},{name:'B',age:45},{name:'H',age:20},{name:'D',age:56}];
// objs.sort(
// function (obj1,obj2) {
// return obj1.age-obj2.age;
// }
// );
// objs.sort(
// sortByPropName('age')
// );
objs.sort(
sortByPropName('name')
);
//遍历
objs.forEach(function (item,index,arr) {
console.log(item.name+'---'+item.age);
});
console.log('分割线-----------------');
}
//递归
function jiecheng (num) {
if(num<2){
return 1;
}else{
return num*jiecheng(num-1);
}
}
//等价
function jiecheng (num) {
if(num<2){
return 1;
}else{
return num*arguments.callee(num-1);
}
}
//获取调用方的代码
function callerTest () {
// console.log(callerTest.caller);
//等价
console.log(arguments.callee.caller);
}
//调用方
function yingyong () {
callerTest();
}
//this的运用
color='red';
function thisTest () {
console.log(this.color);
}
var obj={color:'bule'};
thisTest();//red
obj.thisTest=thisTest;
obj.thisTest();//bule
//简洁的方法如下
function thisTest2 () {
console.log('thisTest2:'+this.color);
}
//指定对象
thisTest2.call(window);
thisTest2.call(obj);
//绑定对象,返回指定对象的方法
var thisTest2Obj=thisTest2.bind(obj);
thisTest2Obj();
//math的使用
function Mathtest () {
var arr=[34,2,4,5];
console.log(Math.max(23,1,2));
console.log(Math.max.apply(Math,arr));
}
window.function () {
//函数作为入参
console.log(sumBao(sum,10,20));
// test();
console.log('阶乘结果:'+jiecheng(4));
yingyong();
Mathtest();
}
</script>
<body>
</body>
</html>
js函数2
最新推荐文章于 2019-04-09 20:19:19 发布