JS函数
函数
一、作用 :封装一段待执行的代码
二、语法 :
//函数声明 function 函数名(参数列表){ 函数体 return 返回值; } //函数调用 函数名(参数列表);
1.无参数无返回值的函数
//函数声明 function f1(){ console.log('f1被调用'); } //函数调用 f1()
2.带参数的函数
//Js允许形参和实参的个数不匹配 function f2(n,m){//形参未传值,默认为undefined console.log(n*n); //函数内部可以使用arguments获取实际传递的参数 console.log(arguments) } f2(5);//函数调用是将实际参数赋值给形式参数 //25 f2(3,9);//允许形参和实参的个数布匹配 //9
3.带有返回值的函数
function f3(a){ //局部变量r,只能在当前函数中使用 var r=a*a; var r1=a+a; //将函数内部的变量传递给外界使用 //只能返回一个值,后面的代码都不执行 return r,r1; //不管最后返回几个值 就返回最后一个值 r1 console.log('函数使用')//不执行 } //全局变量r var r = f3(4); console.log(r,);//8
三、使用 :函数名自定义,见名知意,命名规范参照变量的命名规范。普通函数以小写字母开头,用于区分构造函数(构造函数使用大写字母开头,定义类)
四、匿名函数:省略函数名的函数。语法为:
匿名函数自执行
(function (形参){ })(实参);
匿名函数的使用,自执行:(匿名函数的声明)(实参)
(function(){ //构建局部作用域 console.log('匿名函数自执行'); })()
定义变量接收匿名函数
var fn = function (){}; fn(); //函数调用
匿名函数的使用,自执行:(匿名函数的声明)(实参)
(function(){ //构建局部作用域 console.log('1.匿名函数自执行'); })() console.log('-----------------------') var fn=function(){ console.log('2.fn被调用'); } fn(); console.log(2,fn)//函数 console.log('-----------------------') //函数作为参数传递 function show(f){ console.log('show:',f) f(); //因为show调用的fn的函数 所有此处的f就是fn } //直接传递函数名 show(fn);//f=fn console.log('-----------------------') //匿名函数作为参数传递 show(function(){ console.log('4.直接传递匿名函数') })
1.匿名函数自执行 ----------------------- 2.fn被调用 2 ƒ (){ console.log('2.fn被调用'); } ----------------------- show: ƒ (){ console.log('2.fn被调用'); } 2.fn被调用 ----------------------- show: ƒ (){ console.log('4.直接传递匿名函数') } 4.直接传递匿名函数
五、作用域:JS中作用域分为全局作用域和函数作用域,以函数的{ }作为划分作用域的依据
1. 全局变量和全局函数
只要在函数外部使用var关键字定义的变量,或函数都是全局变量和全局函数,在任何地方都可以访问
所有省略var关键字定义的变量,一律是全局变量
2. 局部变量/局部函数
在函数内部使用var关键字定义的变量为局部变量,函数内部定义的函数也为局部函数,只能在当前作用域中使用,外界无法访问
3. 作用域链
局部作用域中访问变量或函数,首先从当前作用域中查找,当前作用域中没有的话,向上级作用域中查找,直至全局作用域