文档章节

JavaScript要点 (六) 函数参数

MR_BT
 MR_BT
发布于 2017/01/21 01:00
字数 601
阅读 1
收藏 0

JavaScript 函数对参数的值没有进行任何的检查。


函数显式参数(Parameters)与隐式参数(Arguments)

函数的显式参数:

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

函数显式参数在函数定义时列出。

函数隐式参数在函数调用时传递给函数真正的值。

 


 

参数规则

 

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

 

JavaScript 函数对隐式参数没有进行类型检测。

 

JavaScript 函数对隐式参数的个数没有进行检测。


 

 

默认参数

 

如果函数在调用时未提供隐式参数,参数会默认设置为: undefined

 

有时这是可以接受的,但是建议最好为参数设置一个默认值

function myFunction(x, y) {
    if (y === undefined) {
          y = 0;
    } 
}

或者

function myFunction(x, y) {
    y = y || 0;
}

注:如果y已经定义 , y || 返回 y, 因为 y 是 true, 否则返回 0, 因为 undefined 为 false。


 

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

JavaScript 函数有个内置的对象 arguments 对象。

argument 对象包含了函数调用的参数数组。

通过这种方式你可以很方便的找到最后一个参数的值:

 1 x = findMax(1, 123, 500, 115, 44, 88);
 2  
 3 function findMax() {
 4     var i, max = 0;
 5     for (i = 0; i < arguments.length; i++) {
 6         if (arguments[i] > max) {
 7             max = arguments[i];
 8         }
 9     }
10     return max;
11 }

或者创建一个函数用来统计所有数值的和:

1 x = sumAll(1, 123, 500, 115, 44, 88);
2 
3 function sumAll() {
4     var i, sum = 0;
5     for (i = 0; i < arguments.length; i++) {
6         sum += arguments[i];
7     }
8     return sum;
9 }

 

通过值传递参数

在函数中调用的参数是函数的隐式参数。

JavaScript 隐式参数通过值来传递:函数仅仅只是获取值。

如果函数修改参数的值,不会修改显式参数的初始值(在函数外定义)。

隐式参数的改变在函数外是不可见的。


 

通过对象传递参数

在JavaScript中,可以引用对象的值。

因此我们在函数内部修改对象的属性就会修改其初始的值。

修改对象属性可作用于函数外部(全局变量)。

修改对象属性在函数外是可见的。

 

本文转载自:http://www.cnblogs.com/tig666666/p/5919378.html

共有 人打赏支持
MR_BT
粉丝 0
博文 49
码字总数 13680
作品 0
深圳
高级程序员
私信 提问
Node.js开发者必须了解的4个JS要点

Node.js是一个面向服务器的框架,立足于Chrome强大的V8 JS引擎。尽管它由C++编写而成,但是它及其应用是运行在JS上的。本文为开发者总结了4个Node.js要点。 1. 非阻塞(Non-blocking)或异步I...

前端全栈开发学习
2018/11/13
0
0
JavaScript 的 4 种数组遍历方法: for VS forEach() VS for/in VS for/of

译者按: JS 骚操作。 原文:For vs forEach() vs for/in vs for/of in JavaScript 译者: Fundebug 本文采用意译,版权归原作者所有 我们有多种方法来遍历 JavaScript 的数组或者对象,而它们...

Fundebug
03/11
0
0
JavaScript 基础 --- (数据类型/循环/条件)

一、js 输出 1.window.alert() 警告框 2.document.write() 写到 HTML 文档中 3.innerHTML 写到 HTML 元素 4.console.log() 写到浏览器的控制台 二、js 语句与注释 1. ; (var a = 1;) ;表...

姜白告
2018/06/19
0
0
重构你的javascript代码

重构,对于每个开发者都至关重要,特别是对于那些需要进阶的高级程序员。根据二八理论,20%的重构方法,能解决80%的坏代码。笔者最近查阅较多js编码指南以及重新阅读了《代码整洁之道》、《重...

lq782655835
01/22
0
0
JavaScript 中的继承:ES3、ES5 和 ES6

选择一种继承方式 JavaScript 是一门动态语言,动态意味着高灵活性,而这尤其可以体现在继承上面。JavaScript 中的继承有很多种实现方式,可以分成下面四类: Mixin 模式,即属性混入,从一个...

天方夜
2018/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
今天
2
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
2
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
3
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部