可以通过arguments对象来实现可变的参数

在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。

arguments是一个数组对象,可以通过下标来实别参数的位置,通过.length来获参数的个数。

代码实例:我们通过arguments来改变函数的默认参数

 <script>
function demo(x,y){
x = arguments[0]?arguments[0]:1; //arguments[0]代表demo函数的参数第一个
y = arguments[1]?arguments[1]:2; //arguments[1]代表demo函数的参数第二个
return x+y
}
alert(demo(4,5)) //我们调用函数的参数=>9
alert(demo()) //我们调用默认参数 =>3
</script>

代码实例:通过arguments.length来获取参数的长度所实现的参数和

 <script>
function demo(){
var count = arguments.length //把参数的长度保存的count的变量中
var sum =0 //声名一个总和的变量
for(var i =0;i<count;i++){ //使用for循环把所有参数的长度遍历出来
sum+=arguments[i] //求出每个arguments所对应下标的参数的值相加
}
return sum //把值返回给函数
}
alert(demo(1,2,3,4,5,6)) //=>把自己定义的参数传入,=>21
</script>

代码实例:通过arguments.length再来获取参数的长度所实现的参数最大值

 <script>
function demo(){
var count = arguments.length //把参数的长度保存的count的变量中
var max =0 //声名一个最大值
for(var i =0;i<count;i++){ //使用for循环把所有参数的长度遍历出来
if(arguments[i]>max){ //做一个if语句的判断,遍历出来所有最大值依次给与max,直接便利结束
max = arguments[i]
}
}
return max //把值返回给函数
}
alert(demo(10,20,1,4,11)) //=>把自己定义的参数传入,=>20
</script>

 变量的作用域:

 全局变量和局部变量的区别:

 全局在函数体外声名,从脚开始可以用到脚本结束。

 局部变量在函数体内声名变量只能在函数体内进行使用。

代码示例:

 <script>
var x = "全局变量x";
function demo(){
var x = "局部变量x";
alert(x)
}
demo() //=>先是弹出局布变量x,因为我们调用函数执行代码块,因为x是在函数体内声名的与全局变量不冲突
alert(x) //=>再是弹出全局变量x,因为我们是在函数体外alert(x),只能调用到全局函数的变量,当函数执行完成,自动会回收掉函数体的内容
</script>

最好使用var语句来声名变量:

代码示例 :

 <script>
var x =1
function demo(){
x =2 //如果函数体内变量没有加var关键字,则这个变量则自动变为全局变量
alert(x)
}
demo() //=>输出结果为2
alert(x) //=>此时输出结果也为2,因为函数体内的变量用的是全局变量,变量重名赋值时会被覆盖掉
</script>

用一段混合型的代码示列来全面解析全局变量和局部变量

 <script>
//解析一下全局变量和局部变量
var x = 1,y =2; //这是在script脚本内,函数体外声明的两个全局变量x和y
function demo(x,y){
document.write(x) //=>undefined 因为在调用函数的时候没有写入参数,没有值的参数默认为undefined
document.write(y) //同上
var x = 5,y =6; //在此在函数体内声明了两个局部变量x和y
document.write(x) //由于js代码是从上到下执行的,此时的x用的是局部变量x
document.write(y) //同上
z =x+y //在函数体内声明了一个没有加var的z,此是它是全局变量,但是由是在函数体内赋值,用的x,y都是局部变量
document.write(z) //=>输出结果为11
}
demo()
alert(z) //由于z是全局变量,还是可以在函数外取到z的值 =>11
alert(x) //=>1 在函数体外得到x,得到的是全局变量x
alert(y) //同上
</script>

js 默认的参数、可变的参数、变量作用域的更多相关文章

  1. Java可变参数/可变长参数

    Java可变参数/可变长参数 传递的参数不确定长度,是变长的参数,例如小例子: package demo; public class Demo { public static int sum(int ...

  2. Python3_函数参数传递、可变与不可变对象、变量作用域、函数返回值

    参数传递: 在 python 中,类型属于对象,变量是没有类型的:(变量都仅仅是一个对象的引用,没有类型之分)a=[1,2,3] a="Runoob" 以上代码中,[1,2,3] ...

  3. 第十一篇 Python函数之定义&形参&实参&位置参数&关键字参数&可变长参数&默认参数

    函数的定义:函数是为了完成某一特定功能的,函数是逻辑结构化和过程化的一种编程方法 函数的定义格式,函数一般都是有返回值的 #语法 #函数名要能反映其意义 def 函数名(参数1,参数2,参数3,... ...

  4. 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)

    详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类   Python中函数参数定义及调用函数时传参 ...

  5. [python][oldboy]关键字参数和位置参数,默认参数,可变长参数(无名,有名)

    关键字参数和位置参数是在函数调用的时候定义 关键字参数是以键-值对出现,无序,多一个不行,少一个不行 位置参数,有序,多一个不行,少一个不行 混搭:所有位置参数必须在关键字参数的左边 默认参数是在函数 ...

  6. 函数、可变参数、keyword-only参数、实参解构

    函数的数学定义:y=f(x) ,y是x的函数,x是自变量.y=f(x0, x1, ..., xn) python中的函数: 由函数名称.参数列表.和若干语句组成的语句块构成,完成一定的功能,是组织代码 ...

  7. [转]深度探索C语言函数可变长参数

    转自:http://www.cnblogs.com/chinazhangjie/archive/2012/08/18/2645475.html 一.基础部分 1.1 什么是可变长参数 可变长参数:顾名 ...

  8. C++ 系列:函数可变长参数

    一.基础部分 1.1 什么是可变长参数 可变长参数:顾名思义,就是函数的参数长度(数量)是可变的.比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的.下面是 printf ...

  9. Day14_78_可变长参数

    可变长参数 可变长参数只能在形参列表的最后一个,且只能出现一次. 代码实例 import java.util.Date; public class 可变长参数 { public static void ...

随机推荐

  1. 单点登录SSO的实现原理

    单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...

  2. Expression Blend 4 激活码

    Expression Blend 4 激活码: 6WDDQ-K7D4F-GQGF4-2VYBJ-8K6MB

  3. jsp+urlrewrite实现html分页简单粗暴实现

    今天去检查一同事写的一分页实现,看了有点郁闷,都说了要换成html实现方便搜索引擎收录,他还是用的js,真是晕.还得帮他解决 好吧.言归正传,我在他的基础上粗暴的修改了下,达到了基本的效果,带数字分页 ...

  4. spring 最全MAVEN 依赖引入配置

    <properties> <spring.version>4.1.6.RELEASE</spring.version> </properties> &l ...

  5. iOS性能优化中的离屏渲染

    GPU屏幕渲染有以下两种方式: On-Screen Rendering意为当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行. Off-Screen Rendering意为离屏渲染 ...

  6. BA的广度和深度

    http://insights.thoughtworkers.org/ba-capability-and-development-path-in-thoughtworks/ 作者:ThoughtWor ...

  7. 使用Pager-taglib进行分页

    在.net中,我们有分页控件.在java中,我们有分页标签库.他们都已经为我们封装好了,我们只需要给这几个参数:数据.当前页码.每页记录数,就能完成分页,所以他们是大同小异的. 今天来说说Pager- ...

  8. 【Java】通过DES加密和解密工具,对字符串进行加密和解密操作

    分享一个非常不错的字符串加密和解密的程序. 可以指定不同的密钥对同一字符串进行不同的加密操作,增强加密性能. Java代码如下: package com.app; import java.securi ...

  9. eclipse通过classpath variable引用类库

    众所周知.eclipse的project bulid path中能够引用第三方类库(如图1). 图1 可是这样的方式有个缺点:对类库的引用是通过绝对路径.假设有两台电脑(办公室1台.家1台),非常可能 ...

  10. [Javascript + rxjs] Using the map method with Observable

    Like an array, Observable has a map method that allows us to transform a sequence into a new Observa ...