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) 收藏 举报