JavaScript函数

一、函数的定义与调用

1.内置函数(parseFloat(),isNaN(' '),parseInt())

console.log(parseFloat('7.26e-2 '));  //返回:0.0726

console.log(isNaN(' '));  //判断是否是NaN:false

console.log(parseInt('15.99 '));  //返回:15

2.自定义函数(函数名可以由大小写字母、数字、下划线和$符号组成,但函数名不能以数字开头,也不能是JavaScript中的关键字)

function 函数名(参数1,参数2....){ 

函数体....

}

使用:

3.获取函数调用时传递的所有实参(通过arguments对象获取函数调用时传递的实参,实参总数通过length属性获取,具体参数可通过数组遍历的方式进行操作),代码演示:

function transferParam(){

console.log(arguments.length); //获取用户实际传递的参数数量

console.log(arguments); //控制台输出用户调用函数时传递的参数

}

4.含有默认值的参数与剩余参数

1) function great(name,say='Hi,I\'m'){

console.log(say+name);

}

2) 剩余参数(利用"...变量名"的方式动态地接受用户传递的不确定数量的实参),代码演示:

function transferParam(num1,...theNums){

theNums.unshift(num1); //在剩余参数数组的头部添加第一个参数

console.log(theNums); //在控制台输出用户调用函数时传递的参数

}

若定义transferParam()函数时,所有参数的数量都不确定,则可将上例修改为:

function transferParam(...theNums){

console.log(theNums);//在控制台输出用户调用函数时传递的参数

}

5.函数调用(使用参数名传入相应参数即可),代码演示:


结果:

二、变量的作用域

1)全局变量:不在任何函数内声明的变量(显示定义)或在函数内省略var声明的变量(隐式定义)都称为全局变量,它在同一个页面文件中的所有脚本内都可以使用.

2)局部变量:在函数体内利用var关键字定义的变量称为局部变量,它仅在该函数体内有效.

3)块级变量:ES6提供的let关键字声明的变量称为块级变量,仅在"{}"中有效.

代码演示:

结果:

三、匿名函数

1.函数表达式(将生命的函数赋值给一个变量,通过变量完成函数的调用和参数的传递),演示代码:

var fn=functioin sum(num1,num2){   //定义函数表达式,求和

return num1+num2;

}

fn();       //调用函数

注:函数表达式必须在调用之前,且调用时采用的是"变量名()"的方式,不能通过函数名称调用;函数声明的方式不限制定义与调用的顺序.

2.匿名函数(没有函数名称的函数,可以有效避免全局变量的污染以及函数名的冲突问题),演示代码:

var fn=function(num1,num2){ //函数表达式中省略函数名

       return num1+num2;

};

fn(1,2);

(function(num1,num2){   //自调用方式

       return num1+num2;

})(2,3);

document.body.onclick=function (){   //处理事件

      alert('hi,everyone!');

};

3.箭头函数(介绍几种用法)

(a1,a2,...,aN)=>{statements} //标准语法

(a1,a2,...,aN)=>{return expression;}或(a1,a2,...,aN)=>expression //返回值

(singleParam)=>{statements;}或singleParam=>{statements;}//含有一个参数

()=>{statements;}或_=>(statements;)//无参箭头函数

具体示例:

var fn1=x=>x+2; //设置1个参数

console.log(fn1(4));  //输出结果:6

var fn2=(x,y)=>x+y;  //设置2个参数

console.log(fn2(1,2)); //输出结果:3

注:"=>"不是操作符或者运算符,但箭头函数受操作符的优先级影响.

4.回调函数(指的是一个函数A作为参数传递给一个函数B,然后在B的函数体内调用函数A;此时称函数A为回调函数.匿名函数常用作函数的参数传递,实现回调),代码演示:

结果:

注:在函数中设置了回调函数后,可以根据调用时传递不同的参数,在函数体中特定的位置实现不同的功能.

5.介绍在JS中为数组提供的一些利用回调函数实现具体功能的方法:

find()  返回数组中满足回调函数的第一个元素的值,否则返回undefined

every()  测试数组的所有元素是否都通过了回调函数的测试

some()   测试数组的某些元素是否通过回调函数实现的测试

forEach()  对数组的每个元素执行一次提供的函数

map()  创建一个新数组,其结果是该数组中的每一个元素都调用一次提供的回调函数后返回的结果

reduce() 对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值

reduceRight()  接收一个函数作为累加器(accumulator)和数组的每个值(从右到左)将其减少为单个值.

map()方法的使用

var arr=['a','b','c'];

arr.map(function(value,index){

console.log(value,index);

})

结果:第1次:"a 0",第2次:"b 1",第3次:"c 2"

arr.map()实现二维数组的转置

结果:

四、嵌套和递归

1.嵌套函数与作用域链:嵌套函数指的是在一个函数内部存在另- 个函数的声明。对于嵌套函数来言,内层函数只能在外层函数作用域内执行,在内层函数执行的过程中,若需要引入某个变量,首先会在当前作用域中寻找,若未找到,则继续向上一层级的作用域中寻找,直到全局作用域,我们称这种链式的查询关系为作用域链。

结果:

2.递归调用(指的是一个函数在其函数体内调用自身的过程,这种函数称为递归函数),代码演示:

结果(这里输入的值为:9):

3.闭包函数(所谓“闭包”指的是有权访问另一函数作用域内变量(局部变量)的函数),用途1)可以在函数外部读取函数内部的变量.2)可以让变量的值始终保持在内存中.

注:闭包函数会使得函数中的变量一直被保存在内存中,内存消耗很大,所以闭包的滥用可能会降低程序的处理速度,造成内存消耗等问题.

闭包函数实现:

结果:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,612评论 5 471
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,345评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,625评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,022评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,974评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,227评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,688评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,358评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,490评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,402评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,446评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,721评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,802评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,013评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,504评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,080评论 2 341

推荐阅读更多精彩内容