javascript 函数的定义与参数的有无

一、函数定义

function fName(params){

  statements;

  return somevalue;//可以省略

}

注意事项:

1、参数可有,可无。不定义参数,在调用参数时,也可以传入参数;

例如:

 1 function add(){
 2     if(arguments.length==1){
 3         alert(arguments[0]);
 4     }else if(arguments.length==2){
 5         alert(arguments[0] + arguments[1] );
 6     }else{
 7         alert(arguments[0] + arguments[1] + arguments[2] );
 8     }
 9 }
10 add(1);
11 add(1,2);
12 add(1,2,3);
13 add(1,2,3,4);

2、1中用到的是javascript中的一个对象:参数数组对象arguments,利用长度属性进行判断和调用。同时,这是一个内置对象,不可new。

object Array arguments

arguments.length

argument[i]

3、函数不存在重载概念,但是可以用1中的方法实现重载的功能。1中的方法可以优化为以面的代码:

 1 function add(){
 2     var total=0;
 3     for(var i=0;i<arguments.length;i++){
 4         total+=arguments[i];
 5     }
 6     alert(total);
 7 }
 8 add(1);
 9 add(1,2);
10 add(1,2,3);
11 add(1,2,3,4);

4、函数可以有返回值,也可以没有返回值,定义时的区别只在一个return语句。

5、局部变量与全局变量

函数内定义的变量,如果加var就是局部变量,如果不加var会自动变成一个全局变量

 1 var x="x0";//全局变量
 2 y="y0";//全局变量
 3 function f(){
 4     var z="z1";//使用var,是局部变量,作用域是函数内,函数外无法调用
 5     var x="x1";//使用var,是局部变量,虽然与全局变量x重名,但局部变量优先,也不会修改外部x的值
 6     y="y1";//自动全局变量,会修改外面的y值
 7     s="s1";//自动全局变量,全局可调用
 8     for(var i=0;i<2;i++){
 9
10     }
11     alert(x);//x1
12     alert(y);//y1
13     alert(i);//2,js没有块级作用域,即js中的作用域不是用{}来界定的,而是用function {}来界定的,这和java是不一样的
14 }
15 f();
16 alert(x);//x0,函数内的x是局部变量,不改变全局变量x的值
17 alert(y);//y1,在函数内调用的是全局变量y,值已经发生变化
18 alert(typeof z);//undefined,作用域在函数内,无法在函数外调用 ,直接调用会发生错误
19 alert(s);//s1,全局变量

6、块级作用域与函数作用域

javascript 不是块级作用域,即不是用{}来界面scope,而是用function {}来界定scope,所以5中第13行,i的值在函数内部都是可见的;而第18行,z在函数外不可见。5中的函数f()等价与下面的函数:

 1 function f(){
 2     var i;
 3     var z="z1";//使用var,是局部变量,作用域是函数内,函数外无法调用
 4     var x="x1";//使用var,是局部变量,虽然与全局变量x重名,但局部变量优先,也不会修改外部x的值
 5     y="y1";//自动全局变量,会修改外面的y值
 6     s="s1";//自动全局变量,全局可调用
 7     for(i=0;i<2;i++){
 8
 9     }
10     alert(x);//x1
11     alert(y);//y1
12     alert(i);//2,js没有块级作用域,即js中的作用域不是用{}来界定的,而是用function {}来界定的,这和java是不一样的
13 }

相关于java中的作用域提升。

再看下面一个例子:

 1 var x="x0";
 2 function f(){
 3     alert(x);//undefined,函数内的变量声明是整个函数内可网子 的,也就是说下面var x="x1"已经转化为
 4              //var x(上提到函数内部最上方)和x="x1"(原相对位置)两部分,此外x是一个已经声明的局部变量,但没有初始化
 5     alert(y);//undefined,理由同上
 6     alert(typeof(z));//不出结果,报错,错误原因为:错误的引用。因为下面的z没有使用var,会生成一个全局变量,
 7                       //但是此时还没有执行到该处,所以以时还是末声明的,改成alert(typeof(z)),结果为undefined。
 8     var x="x1";
 9     var y="y1";
10     z="z1";//声明一个全局变量
11     alert(x);//x1
12     alert(y);//y1
13     alert(z);//z1
14 }
15 f();

快12点了,先写到这里!

时间: 2024-08-01 10:45:42

javascript 函数的定义与参数的有无的相关文章

Javascript函数(定义、传值、重载)

Javascript 函数的定义的方式有不止一种. 第一种方式: function fn1(){ alert(typeof fn1); alert(“fn1”); } 在调用的时候直接就可以fu1(); 函数运行的结果就是两个alert:function   fn1. 有必要说明的是,function是一个对象(在后面对对象的说明中也会具体细说),新定义的函数就是function这个类的一个实例.但是function和object的区别就在于在定义两个函数实例fn1和fn2的过程中,实现了对fu

javascript函数的定义与执行

要理解javascript函数的定义与执行,首先需要知道这几个重要的概念,现在可以先知道稍后再理解! 函数的执行环境(excution context).活动对象(call object).作用域(scope).作用域链(scope chain). 接下来,我们以这个函数为例进行分析: 步骤: 1.设置作用域链 当定义函数a的时候,JS解释器会将函数a的作用域链(scope chain)设置为“定义a时a所在的环境”,此处a第一个添加的作用域是window对象.(如果a是一个全局函数,则scop

Python函数的定义、参数传入与函数的调用

作为计算机代码的一种抽象方式,函数在Python中扮演了极为重要的角色.今天给大家介绍Python函数的定义.参数的传入以及调用方式.其中函数参数的传入方式为本节重点内容.Python函数的参数形式包括必选参数.默认参数.可变参数.命名关键字参数以及关键字参数.五类参数可单独传入也可组合传入. >>>> Python 函数的定义 Python中使用def语句来定义函数,然后依次写出函数名.括号.括号内的参数以及最后不能忘记的冒号,函数体需另起一行在缩进块中编写,最后返回值用retu

2017寒假零基础学习Python系列之函数之 函数之定义可变参数

若想让函数接受任意个参数,就可以定义一个可变的参数: def fn(*args): print args fn() >>>() fn(1,2,5,6) >>>(1,2,5,6) 原理是Python解释器把传入的一组参数封装在一个tuple传递给可变参数,因此在函数内部,直接把变量args看成一个tuple就好了,目的是简化调用 小习题:假设我们要计算任意个数的平均值,就可以定义一个可变参数: def average(*args): ... 这样,在调用的时候,可以这样写

(九)JavaScript之【JS函数(定义、参数、调用、【闭包】)】[较深,胆小勿进]

定义: 1 /** 2 * 函数表达式 3 * 4 * Function() 构造函数 5 * 6 * 函数提升(Hoisting) 7 * JavaScript默认将当前作用域提升到前面去 8 * Hoisting应用在变量的声明和函数的声明 9 * [使用表达式定义函数时无法提升] 10 * 11 * 自调用函数 12 * 13 * 函数是对象*/ 1 //函数表达式储存在变量中 2 var x = function () { return 'message'; }; 3 4 console

javascript函数 (二 定义函数的三种方法)

javascript定义函数(声明函数)可以有三种方法:正常方法.构造函数.函数直接量 <html><head></head><body> <script type="text/javascript"> /*javascript定义函数(声明函数)可以有三种方法:正常方法.构造函数.函数直接量.*/ /*1.正常方法 function(param){}*/ function print(msg) { document.writ

函数的定义和参数

函数的写法: 例子: def sum(x,y): #定义 print('x={0}'.format(x)) print('y={0}'.format(y)) return x+ys1=sum(10,100) #调用s2=sum(x=100,y=10)print(s1,s2) 函数的参数: #默认参数def A(a,b=10): print(a) print(b)A(1)A(10,100) #多参数def funcA(a,*args): print(a) #10 print(args) #(100

函数的定义与参数(初学者)

1.函数定义的一般形式: (1)定义无参函数的一般形式为: 类型标识符 函数名() { 声明部分 语句部分 } 在定义函数时要用"类型标识符"指定函数值的类型,即函数带回来的值的类型. (2)定义有参函数的一般形式为: 类型标识符 函数名(形式参数表列) { 声明部分 语句部分 } 例: int max(int x,int y) { int z;/*声明部分*/ z=x>y?x:y; return(z); } (3)定义空函数的一般形式为: 类型标识符 函数名() {} 例: d

javaScript 函数(多个参数)

<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>带多个参数的函数</title><style>#div1{ height:100px; width:100px; backgro