js 默认的参数、可变的参数、变量作用域
可以通过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 默认的参数、可变的参数、变量作用域的更多相关文章
- Java可变参数/可变长参数
Java可变参数/可变长参数 传递的参数不确定长度,是变长的参数,例如小例子: package demo; public class Demo { public static int sum(int ...
- Python3_函数参数传递、可变与不可变对象、变量作用域、函数返回值
参数传递: 在 python 中,类型属于对象,变量是没有类型的:(变量都仅仅是一个对象的引用,没有类型之分)a=[1,2,3] a="Runoob" 以上代码中,[1,2,3] ...
- 第十一篇 Python函数之定义&形参&实参&位置参数&关键字参数&可变长参数&默认参数
函数的定义:函数是为了完成某一特定功能的,函数是逻辑结构化和过程化的一种编程方法 函数的定义格式,函数一般都是有返回值的 #语法 #函数名要能反映其意义 def 函数名(参数1,参数2,参数3,... ...
- 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)
详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类 Python中函数参数定义及调用函数时传参 ...
- [python][oldboy]关键字参数和位置参数,默认参数,可变长参数(无名,有名)
关键字参数和位置参数是在函数调用的时候定义 关键字参数是以键-值对出现,无序,多一个不行,少一个不行 位置参数,有序,多一个不行,少一个不行 混搭:所有位置参数必须在关键字参数的左边 默认参数是在函数 ...
- 函数、可变参数、keyword-only参数、实参解构
函数的数学定义:y=f(x) ,y是x的函数,x是自变量.y=f(x0, x1, ..., xn) python中的函数: 由函数名称.参数列表.和若干语句组成的语句块构成,完成一定的功能,是组织代码 ...
- [转]深度探索C语言函数可变长参数
转自:http://www.cnblogs.com/chinazhangjie/archive/2012/08/18/2645475.html 一.基础部分 1.1 什么是可变长参数 可变长参数:顾名 ...
- C++ 系列:函数可变长参数
一.基础部分 1.1 什么是可变长参数 可变长参数:顾名思义,就是函数的参数长度(数量)是可变的.比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的.下面是 printf ...
- Day14_78_可变长参数
可变长参数 可变长参数只能在形参列表的最后一个,且只能出现一次. 代码实例 import java.util.Date; public class 可变长参数 { public static void ...
随机推荐
- ios 游戏《魂斗罗》 AL文件素材破解
1.破解原理非常简单就是找png的8字节的前缀(baidu png 文件编码格式). 2.破解就图就可以看见了 3.这样一个个个的改是不是非常麻烦,所有我专门写了个py脚本在干这事!一步搞定! 源码如 ...
- 部署war包到tomcat服务器
1.首先通过eclipse的maven install生成项目的war包 2.然后把war包解压到tomcat目录下的webapps目录下 3.然后运行tomcat下的bin目录下的startup.b ...
- Linux安装Team Service Agent
(1)下载linux agent文件(在windows中下载后,通过WinSCP复制至linux服务器中) 或者可以在linux直接下载文件(直接下载不会因为网络问题而导致传输中断) 首先使用命令建立 ...
- Theano FCN实现与训练经验与教训小结
NaN 计算softmax loss时要用numeric robust 的计算方式. softmax与 loss可能要分开计算. 得到前者的计算方式可以是常规方法. 但计算后者时要注意无穷大和NaN的 ...
- iOS开发 Xcode中的Info.plist字段含义
Info.plist用于向iOS提供关于app,bundle或者framework的一些重要信息.它指定了比如一个应用应该怎样启动,它如何被本地化,应用的名称,要显示的图标,还有更多.Info.pli ...
- [C#] 常用工具类——应用程序属性信息访问类
using System; using System.Collections.Generic; using System.Text; using System.Reflection; namespac ...
- 草稿-Hyper-V
Hyper-V Over SMB3.0 为Hyper-v宿主机和故障转移群集做防病毒排除 微软SMB 3.0文件共享协议新特性介绍
- mysql 加载文本数据
可以配置导入哪几列,每个字段用什么隔开,每行用什么隔开,也可以单独设置某个字段的值. 详细看代码: LOAD DATA INFILE 'D:/aa.txt' INTO TABLE aa FIELDS ...
- Introspector(内省)简单演示样例 与 简单应用
简单演示样例: package com.asdfLeftHand.test; import java.beans.BeanDescriptor; import java.beans.BeanInfo; ...
- nginx lua 开发笔记
获取 在lua代码中获取 location 正则的参数对应的变量 // location location ~/lua_http_2/(\w*.+) { } // lua local vars=ngx ...