js 默认的参数、可变的参数、变量作用域

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

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

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

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

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

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

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

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

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

 变量的作用域:

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

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

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

代码示例:

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

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

代码示例 :

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

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

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

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

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

关键字参数和位置参数是在函数调用的时候定义 关键字参数是以键-值对出现,无序,多一个不行,少一个不行 位置参数,有序,多一个不行,少一个不行 混搭:所有位置参数必须在关键字参数的左边 默认参数是在函数定义的定义,在函数调用的时候可以不用传改参数 可变长参数:*args, **kwargs 可变长参数和位置参数的混搭 1 def add(x,y): 2 return x + y 3 def add_1(x=0, y=1): 4 return x + y 5 6 def list_add(x, *a

javascript痛点之一变量作用域

1.用var声明的变量是有作用域的,比如我们在函数中用var声明一个变量 1 'use strict'; 2 function num(){ 3 //用var声明一个变量num1 4 var num1 = 15; 5 } 函数中声明了一个变量num1,在js函数中用var声明变量实际上就声明了一个局部变量.局部变量就是在外部访问不到只能在函数内部访问. 1 'use strict'; 2 function num(){ 3 //用var声明一个变量num1 4 var num1 = 15; 5

?Swift语言中为外部参数设置默认值,可变参数,常量参数,变量参数,输入输出参数

引用自这里:Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 目录[-] 7.4.4  为外部参数设置默认值 7.4.5  可变参数 7.4.6  常量参数和变量参数 7.4.7  输入-输出参数 7.4.4  为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift1.2语言快速入门v2.0. [示例7-11]以下的代码就为外部参数toString.withJoiner设置了默认的参数"Swift"和&qu

C#面向过程之局部变量、成员变量、变量作用域、可变参数

局部变量与成员变量:  局部变量:定义在方法里面的变量就叫做局部变量:没有默认的初始值,使用变量之前必须给它赋值成员变量:定义在类下面的变量叫做成员变量:如果是数值类型默认初始值为0 如果是引用类型默认初始值为空 变量作用域: 范围 变量在那些范围可以访问到 在对应的大括号里面能访问 Console.WriteLine() Console.Out.WriteLine() 可变参数: params int [] arr arr为一个可变数组 可以给多个元素 也可以只给一个 也可以不给,若一个参数都

python的位置参数、默认参数、关键字参数、可变参数区别

一.位置参数 调用函数时根据函数定义的参数位置来传递参数. #!/usr/bin/env python # coding=utf-8 def print_hello(name, sex): sex_dict = {1: u'先生', 2: u'女士'} print 'hello %s %s, welcome to python world!' %(name, sex_dict.get(sex, u'先生')) # 两个参数的顺序必须一一对应,且少一个参数都不可以 # print_hello('t

Python 必选参数,默认参数,可变参数,关键字参数和命名关键字参数

Py的参数还真是多,用起来还是很方便的,这么多参数种类可见它在工程上的实用性还是非常广泛的. 挺有意思的,本文主要参照Liaoxuefeng的Python教程. #必选参数 def quadratic(a, b, c): if not isinstance(a, (int, float)) or not isinstance(b, (int, float)) or not isinstance(c, (int, float)): raise TypeError('bad operand type

位置参数,默认参数,非关键字可变长参数,关键字可变长参数

def f(name, gender = 'male', *args, **kw): pass 位置参数:name 默认参数:gender 非关键字可变长参数:args 关键字参数:kw tips:四者的顺序必须是(位置参数)+(默认参数)+(非关键字可变长参数)+(关键字参数) 特殊情况: def f(name, gender = 'male', *args, **kw): print 'name: %s' % name print 'gender: %s' % gender if args

python中非关键字可变长参数和关键字变量参数的区别

#非关键字可变长参数 def add(*arg):    return type(arg) print add() #打印结果 <type 'tuple'> #关键字变量参数 def abd(**args):    return type(args) print abd() #打印结果 <type 'dict'> 由此,非关键字可变长参数是元组类型,关键字变量参数是字典类型

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

在Python中定义函数,可以用必选参数.默认参数.可变参数.关键字参数和命名关键字参数,这5种参数都可以组合使用.但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数.命名关键字参数和关键字参数. Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数. 默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误! 要注意定义可变参数和关键字参数的语法: *args是可变参数,args接收的是一个tuple: **kw是关键字参数,kw接收的