javascript函数

3 篇文章 0 订阅
1 篇文章 0 订阅

javascript函数

javascript函数的参数:

​ 1.形式:其中在函数内部的a叫做形参,而调用函数里的100叫做实参

  function(在此处传参){}  

​    fn1(100); function fn1(a){alert(a)};//可以相当于:

​    fn1(100); function fn1(var a = 100){alert(100)};//但不能这么写

​ 2.也可以传多个参数,如:

    fn1(100,"px"); function fn1(a,b){alert(a+b);}

​ 3.参数可以为js的以下数据类型:数字、字符串、布尔值、函数、对象、未定义,网上很多类似的效果就是用函数传参的方式做的

​ 例如:当以对象当参数时有

 fn5(window,document);

​    function fn5(w,d){

​             w.onload = function(){

​                 d.body.innerHTML=123;

​        }

​    };

​ 4.用参数封装一个方法:

   function fn1(a){

​             if(typeof(a) === 'number' && a===a){

​                 alert(a+20);

​        }else if(typeof(a)==='string'){

​                 alert(a.charAt(2));

​        }else if(typeof(a)==='function'){

​                 a();

​        }

​    }

​ 5.函数传参应用的注意事项:

尽量保证HTML代码结构一致(否则很难重用代码)

需要把核心程序实现,再用函数包裹起来

把每组中不同的值找出来,通过传参分别实现效果

javascript函数返回值:

​ 1.return关键字后面的既是返回值。

​ 2.用函数名+()就可以得到函数的返回值,如:

​ function fn1(){return 100;};

​ alert(fn1()); //结果为100

​ 注意:(1)return关键字可以返回字符串、数字、布尔值、函数、对象([]/{}/null)、未定义,如返回字符串就有.length属性等,typeof(fn1());可以判断返回值的类型。

​ (2)返回函数时,会把这个函数变成字符串返回(包括注释),实际上调用这个函数相当于返回值函数的名字,如:

    function fn2(){

​        return function(){alert(1);};

​    }

​ fn2()(); //前面fn2()是fn2的返回值,后面的()代表调用该返回值

​ 3.函数返回值需要注意的事项:

​ 只有函数代码块里才可以用return,如果一个函数没有return或return后无返回值,则会返回一个未定义;

​ return返回值之后的任何代码都不会执行。

函数返回值

所有函数都有返回值,没有return语句时,默认返回内容为undefined,和其他面向对象的编程语言一样,return语句不会阻止finally子句的执行。

function testFinnally(){

​    try{

​        return 2;

​    }catch(error){

​        return 1;

​    }finally{

​        return 0;

​    }

}

testFinnally();//0

如果函数调用时在前面加上了new前缀,且返回值不是一个对象,则返回this(该新对象)。

function fn(){

​    this.a = 2;

​    return 1;

}

var test = new fn();

console.log(test);//{a:2}

console.log(test.constructor);//fn(){this.a = 2;return 1;}

如果返回值是一个对象,则返回该对象。

function fn(){

​    this.a = 2;

​    return {a:1};

}

var test = new fn();

console.log(test);//{a:1}

console.log(test.constructor);//Object() { [native code] }

函数参数

arguments

javascript中的函数定义并未指定函数形参的类型,函数调用也未对传入的实参值做任何类型检查。实际上,javascript函数调用甚至不检查传入形参的个数。

同名形参

在非严格模式下,函数中可以出现同名形参,且只能访问最后出现的该名称的形参。

function add(x,x,x){

​    return x;

}

console.log(add(1,2,3));//3

​ 而在严格模式下,出现同名形参会抛出语法错误

function add(x,x,x){

​    'use strict';

​    return x;

}
console.log(add(1,2,3));//SyntaxError: Duplicate parameter name not allowed in this context

参数个数

当实参比函数声明指定的形参个数要少,剩下的形参都将设置为undefined值

function add(x,y){

​    console.log(x,y);//1 undefined

}

add(1);

​ 常常使用逻辑或运算符给省略的参数设置一个合理的默认值

function add(x,y){

​    y = y || 2;

​    console.log(x,y);//1 2

}

add(1);

[注意]实际上,使用y || 2是不严谨的,显式地设置假值(undefined、null、false、0、-0、”、NaN)也会得到相同的结果。所以应该根据实际场景进行合理设置

当实参比形参个数要多时,剩下的实参没有办法直接获得,需要使用即将提到的arguments对象

javascript中的参数在内部用一个数组表示。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数。在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。arguments对象并不是Array的实例,它是一个类数组对象,可以使用方括号语法访问它的每一个元素

function add(x){

​    console.log(arguments[0],arguments[1],arguments[2])//1 2 3

​    return x+1;

}

add(1,2,3);

​ arguments对象的length属性显示实参的个数,函数的length属性显示形参的个数

function add(x,y){

​    console.log(arguments.length)//3

​    return x+1;

}

add(1,2,3);

console.log(add.length);//2

​ 形参只是提供便利,但不是必需的

function add(){

​    return arguments[0] + arguments[1];

}

console.log(add(1,2));//3

对象参数

当一个函数包含超过3个形参时,要记住调用函数中实参的正确顺序实在让人头疼

function arraycopy(/*array*/from,/*index*/form_start,/*array*/to,/*index*/to_start,/*integer*/length){

​    //todo

}

​ 通过名/值对的形式来传入参数,这样参数的顺序就无关紧要了。定义函数的时候,传入的实参都写入一个单独的对象之中,在调用的时候传入一个对象,对象中的名/值对是真正需要的实参数据

function easycopy(args){

​    arraycopy(args.from,args.from_start || 0,args.to,args.to_start || 0, args.length);

}

var a = [1,2,3,4],b =[];

easycopy({from:a,to:b,length:4});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值