JS学习四:函数

一、函数

定义、声明函数的格式:

function 函数名 (参数列表) {
语句
return 表达式
}

 如果没有显示的return语句,默认返回的是undefined。

无参数无返回值的函数示例:

function func () {
    console.log("....")
}

 调用:func()

有参数返回值的函数示例,func函数中其中num1,num2称为形参,本质是变量;func(1,2)中的1,2称为实参。

function func (num1, num2) {
    console.log(num1 + num2)
    return num1 + num2
}
func(1, 2) //返回值:3

 在js中,实参可以多于形参,不会抛出异常,且可以取出多余的实参:

function func (num1, num2) {
    for (var i = 0; i < arguments.length; i ++) {
        console.log(arguments[i])
    }
    return num1 + num2
}
func(1, 2, 3, 4, 5, 6, 7, 8) //返回值:3

 arguments:不是数组,是类似于数组的对象。

 

二、变量的作用域

 同python一样,函数中的变量,是局部变量,只可在函数中使用。

function func() {
    var num = 10;
    }
func()
console.log(num);  // 抛出异常:Uncaught ReferenceError: num is not defined

 

在python中,全局变量,可以在局部中使用,但不可直接修改,必须先global声明 ;

但是,在js中,全局变量,可以直接在局部中修改。

var num = 10;
function func() {
    num++
    console.log(num)  //在局部直接修改全局变量
}
func()
console.log(num)  //全局变量的值,在局部域,函数中被修改
//结果:都返回 11

 

直接使用未定义的变量,在python和js中,都会抛出异常: 

function func() {
    console.log(num);
}
func()
//结果:Uncaught ReferenceError: num is not defined

 

但是,在js中,变量可以先使用,后定义:即js中,会提升变量的定义到函数内部的顶部或文件的顶部,但是不会提升变量的赋值。

示例,变量num的定义,被提升到函数内部的最开始处;但变量的赋值没有被提升。

function func() {
    console.log(num);
    var num = 10;
    console.log(num);
}
func()
//结果:undefined和10

 

在js中,没有使用var 定义的变量,而直接赋值,是全局变量,不论是在局部定义的还是在全局定义的,都是全局变量: 

但是,要注意,定义在函数中定义的全局变量,要在此函数被调用后,才会变成全局变量。

function func() {
    p = 10;  // p是全局变量
    }
func()
console.log(p);  // 打印:10

 

未调用函数,函数中定义的全局变量,视作未定义:

function func() {
    p = 10;  // p是全局变量
    }
console.log(p);  // 因为没有调用函数,抛出异常:Uncaught ReferenceError: p is not defined

 

三、函数也是变量

函数可以作为变量,可以作为参数传递。

function func (num1, num2) {
    return num1 + num2;
    };    
var f = func;
console.log(f(2, 3));    
function mySum(s, a, b) {
    return s(a, b)
}
console.log(mySum(f, 3, 5));

 

四、匿名函数

匿名函数定义:

function (a, b) {
    return a + b
}

 以上匿名函数怎么调用,如果要调用需要将函数赋值给变量。

var f = function (a, b) {
    return a + b
}
f(2, 7)

 匿名函数通常用于参数传递或一次性任务。

function func(num1, num2, fc) {
    return fc(num1, num2);
};

 调用匿名函数方式一,将匿名函数f作为变量传递:

console.log(func(3, 4, f))

 调用以上函数二,不通过变量f;直接在函数调用中,传递一个定义的匿名函数。一般是这种调用方式:

var num = func(a, b, function(a, b){return a+b;})
console.log(num(1, 2));  //打印 3

注意:使用匿名函数表达式时,函数的调用语句,必须放在函数声明语句之后!!!普通函数无所谓,是先定义还是先调用。 

一次性任务函数,也叫即时函数,定义后就立即执行。格式:

function(参数){语句}(传入参数)

注意,直接调用匿名函数,要使用()将整体括起来;或者在function前面加上! 

示例:

            (function(a){console.log(a);}('hello'))  //打印hello
            !function(a){console.log(a);}('hello')  //打印hello

 

posted on 2018-11-17 22:41  myworldworld  阅读(90)  评论(0)    收藏  举报

导航