functionName(parameter1, parameter2, parameter3) {
// 要执行的代码……
}

参数规则

JavaScript 函数定义时形参没有指定数据类型。

JavaScript 函数不会对实参的类型进行检测。

JavaScript 函数不会对实参的个数进行检测。

默认参数

如果调用函数时未传入足够多的实参,未提供的参数会被默认设置为: undefined.

所以我们最好为参数设置一个默认值。

function myFunction(x, y) {
console.log(x);
console.log(y);
console.log(typeof y);
y = y || 1; //为 y 参数设置默认值
console.log(y);
}
myFunction(2);

如果传入了 y 参数,y = y || 1 会返回 y;如果没有传入 y 参数,y = y || 1 会返回我们设置的默认值 1,因为 undefined 为 false.

JS不同于其他语言,方便起见它通过第一个值求  “||”,第一个值为“true”,则返回第一个值;第一个值为“false”,则返回第二个值。

Arguments 对象

如果调用函数时传入了过多的实参,参数将无法被引用,因为无法找到对应的参数名。 只能使用 arguments 对象来调用实参。

JavaScript 函数有个内置的对象 arguments 对象。argument 对象包含了调用函数时传入的参数数组,它是一个类数组对象。

我们可以通过 arguments 对象的属性和方法让函数实现很多特殊的功能。

1、js不检测实参的个数,但是我们可以用 argument 对象的 length 属性检测实参的个数。

function add() {
if( arguments.length == 2 ){
return arguments[0] + arguments[1];
}else{
return '传入的参数不合法';
}
} console.log( add(2,3) );
console.log( add(1,2,3) );

2、重载函数。

js是一种弱类型的语言,没有重载机制,当我们重写函数时,会将原来的函数直接覆盖掉。

但是我们可以通过 arguments 对象判断传入实参的类型与数量,进行不同的操作,然后返回不同的数值,以实现重载。

function sumAll() {
var i, sum = 0;
for (i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
} console.log( sumAll(1,2,3,4,5) ); //
console.log( sumAll(1,3,5,7,9,11,13) ); //

3、定义一个函数来连接字符串。

你可以传递任意数量的参数到该函数,第一个参数指定一个字符作为衔接点来连接字符串。

function myConcat(separator) {
var args = Array.prototype.slice.call(arguments, 1);  //从第二个参数开始将参数列表转换成参数数组
return args.join(separator);
} var x = myConcat(", ", "red", "orange", "blue"); //"red, orange, blue"
var y = myConcat("; ", "elephant", "giraffe", "lion", "cheetah"); //"elephant; giraffe; lion; cheetah"
console.log(x);
console.log(y);

附:转成数组的通用函数(可以将 arguments 对象转换成数组)

var toArray = function(s){
try{
return Array.prototype.slice.call(s);
} catch(e){
var arr = [];
for(var i = 0,len = s.length; i < len; i++){
//arr.push(s[i]);
arr[i] = s[i]; //据说这样比push快
}
return arr;
}
}

参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments

JavaScript 中函数的参数的更多相关文章

  1. JavaScript中函数作为另一个函数的参数的时候它存在于哪个作用域

    一直对函数作为参数被传递进另外一个函数理解的不是很清除.先看下这段代码吧: function test(fn){ var bar = 1; fn(); } var bar = 99; test(fun ...

  2. 如何理解javaSript中函数的参数是按值传递

    本文是我基于红宝书<Javascript高级程序设计>中的第四章,4.1.3传递参数小节P70,进一步理解javaSript中函数的参数,当传递的参数是对象时的传递方式. (结合资料的个人 ...

  3. Javascript中函数的四种调用方式

    一.Javascript中函数的几个基本知识点: 1.函数的名字只是一个指向函数的指针,所以即使在不同的执行环境,即不同对象调用这个函数,这个函数指向的仍然是同一个函数. 2.函数中有两个特殊的内部属 ...

  4. JavaScript中函数的形参和实参的实现原理剖析

    我们都知道JS里面参数的传递是可以不一样的,比如我们有一个函数: <script type="text/javascript"> function one(a,b,c) ...

  5. JavaScript中函数的调用

    JavaScript中函数的调用 制作人:全心全意 在JavaScript中,函数定义后并不会自动执行,要执行一个函数需要在特定的位置调用该函数,调用函数需要创建调用语句,调用语句包含函数名称和参数. ...

  6. JavaScript中函数的定义

    JavaScript中函数的定义 制作人:全心全意 在JavaScript中,函数是由关键字function.函数名加一组参数以及置于大括号中需要执行的一段代码定义的.定义函数的基本语法格式如下: f ...

  7. javascript中函数声明、变量声明以及变量赋值之间的关系与影响

    javascript中函数声明.变量声明以及变量赋值之间的关系与影响 函数声明.变量声明以及变量赋值之间有以下几点共识: 1.所有的全局变量都是window的属性 2.函数声明被提升到范围作用域的顶端 ...

  8. 改变JavaScript中函数的内部this指向!

    改变JavaScript中函数的内部this指向! 第一种方法 call call 可以 调用函数 + 改变函数内的this指向! var obj = { name: 'lvhang' } funct ...

  9. JavaScript中函数的调用!

    JavaScript中函数的调用! 1 普通函数 // 1 普通函数 function fn() { console.log(123); } // 函数名 + 一个小括号! 或者 函数名.call() ...

随机推荐

  1. leetcode 1.Two Sum 、167. Two Sum II - Input array is sorted 、15. 3Sum 、16. 3Sum Closest 、 18. 4Sum 、653. Two Sum IV - Input is a BST

    1.two sum 用hash来存储数值和对应的位置索引,通过target-当前值来获得需要的值,然后再hash中寻找 错误代码1: Input:[3,2,4]6Output:[0,0]Expecte ...

  2. l2-loss,l2正则化,l2范数,欧式距离

    欧式距离: l2范数: l2正则化: l2-loss(也叫平方损失函数): http://openaccess.thecvf.com/content_cvpr_2017/papers/Li_Mimic ...

  3. Django实战(二)之模板语言

    该实战教程基于菜鸟教程,菜鸟教程可参考:http://www.runoob.com/django/django-template.html 模板语法,每个框架都有其支持的模板语法,Django的模板语 ...

  4. spring aop,静态及动态代理例子

    @Aspect@Componentpublic class AopText { @Pointcut("execution(public * com.llf.service.*Service. ...

  5. jfinal多数据源ActiveRecordPlugin

    因为项目需要从多个数据库取数据,所以需要配置多个数据源 尝试了ActiveRecordPlugin和DruidPlugin的多数据源,但是因为DruidPlugin在本地一直报错一个很奇怪的语法错误, ...

  6. Asp.net MVC使用FormsAuthentication,MVC和WEB API可以共享身份认证 (转载)

    在实际的项目应用中,很多时候都需要保证数据的安全和可靠,如何来保证数据的安全呢?做法有很多,最常见的就是进行身份验证.验证通过,根据验证过的身份给与对应访问权限.同在Web Api中如何实现身份认证呢 ...

  7. Struts2框架学习笔记--strtus2初识

    struts2概述: 1.struts2框架应用于javaEE三层结构中的Web层框架 2.struts2框架是在struts1和webwork基础之上发展的全新框架(脱胎换骨 ,用法完全不一样)ps ...

  8. DBA手记(学习) - LOGMNR 简单而强大的工具

    LOGMNR首先执行一个ddl(或dml)操作,以记录重做信息: SYS@ ora11g>conn scott/tigerConnected.SCOTT@ ora11g>alter sys ...

  9. Unity 4.7 导出工程在XCode10.1上编译报错

    Unity 4.7 导出工程在XCode 10.1上编译报错,而在XCode 9.3上是可以正常编译运行的.原因是Unity4.7所依赖的头文件和库文件在XCode10上没有了,解决办法如下,把XCo ...

  10. redis学习笔记(三)

    Spring data redis: 要求: Redis 版本 > 2.6 与 Lettuce 或 Jedis 集成,两种java开源Redis库. Spring redis主要做的两件事: 连 ...