JS函数

函数

函数概述

函数 实际就是多行代码的抽取(多行代码会构成特定的功能)(方法)

函数的优点

减少冗余代码(重复的代码放在函数里面 在需要的时候调用)函数封装(特定的一些代码使用函数来包起来),

提高了代码的可维护性及可阅读性

函数的分类

  • 系统函数 window里面的所有函数都属于系统函数 (console.log() alert() prompt()...)

  • 内置函数 所有的内置对象里面的函数 都叫内置函数 (Math.pow())

  • 自定义函数( 自己定义的函数)

内置函数和系统函数我们更关注于他的使用 自定义函数(定义以及使用)

自定义函数的定义以及调用

1.使用function关键词 定义匿名函数(没有名字的函数)
function(形参(可以省略的 可以有多个)){
函数体(代码)
}
//直接调用 让别人(事件)去调用(自动调用)
    (function(){
    console.log('匿名函数')
  })()
   //直接调用 让别人(事件)去调用(自动调用)
  (function(){
   console.log('匿名函数')
    })()</pre>

匿名函数 (声明比较少 他没有复用价值)

2.使用function关键词 定义具名函数 (有名字的函数)
 function 函数名(形参,形参...){
函数体(代码)
}
 function 函数名(形参,形参...){
函数体(代码)
}
//声明 具名函数(第一种)
function sayHello(){
    console.log('hello')
}
sayHello() 
3.使用new Function方式
 var 函数名 = new Function('形参,形参1','函数体')
//定义
var sayBye = new Function('console.log("bye bye!!")')
//调用
sayBye()
//传参
var sayBye = new Function('username','console.log("bye     bye!!"+username)')
//调用
  sayBye('李四')

在程序执行之前有个预编译过程

预编译会做的事情

1.他会声明对应的function和var关键词修饰的变量(开辟内存的操作)

2.对应的function的内存空间开辟以后他会将对应的代码块放到其中 等待调用

3.var 修饰的关键词 只会开辟一个空间 并不会进行赋值(默认给他的一个undefined的值)

return关键词

  1. return 返回对应的数据的 他是在函数内容进行数据返回的(当你调用了
    return操作后 后面的内容将不再执行)

2)如果没有return关键词 返回的一个undefined的值

函数执行过程

1.把对应的开辟的function内存里面的代码块丢给方法栈(执行栈)去执行

2.执行栈就会自动取执行对应的方法 执行完返回对应的结果

3.当前结果返回完毕以后 对应的执行栈里面的内存空间要进行回收(GC)将这个内存空间销毁

函数作用域

作用域

当前一个变量的作用范围 分为局部作用域(在一个函数内声明的 或者是在一段代码块内声明的 他的作用范围就是当前的代码块)和全局作用域(在对应的全局声明的 他的作用范围就是全局的)

作用域链

当前的作用域内没有找到对应的变量就会向上去寻找 而这个过程构成的链式结构称为作用域链

var a = 20
function fn(){
console.log(a);//undefined 没有var关键词就20  
//优先在同级去找 var a 在    function声明会一起声明,但未赋值,初始值是undefined.
var a = 10
if(10>9){
    console.log(a);//undefined 没有var关键词就10
    var a = 30
    if(5>4){
        console.log(a);//undefined 没有var关键词就30
        var a = 40
        if(a>10){
            console.log(a);//40
        }
    }
  }
}
 fn()

函数的arguments(参数数组 参数的集合)

arguments是一个伪数组(有部分的数组特性)(可以通过length属性对应的长度 [] 下标来访问里面的元素)

function sum(){ //不清楚参数个数(无参)
// arguments 可以接收里面所有的参数
//获取里面传递的所有的参数 arguments 长度length
//下标索引是从0开始的
var result = 0
//遍历对应的arguments里面的所有的参数
for(var i=0;i<arguments.length;i++){
    result += arguments[i] //取出里面的参数进行求和
}
return result
}

所有的函数都具备arguments (对象)

访问
  • length属性访问长度

  • [] 加下标(从0开始)访问里面的元素

函数的嵌套

  • 函数的嵌套: 函数内部可以再包含其他函数;

  • 函数之间允许相互调用,也允许向外调用, 但是不可以调用同级函数的嵌套函数;

    function fn1(){
     console.log('函数1');
     function fn2(){
    console.log('函数2');
    // fn1() 没有结束就是死循环
     }
      function fn3(){
     console.log('函数3');
     //调用函数2
     fn2()
    }
     fn2()
    fn3()
     }
     fn1()  //函数1 函数2 函数3 函数2 
    

递归算法

递归可以完成所有循环做的事情 (但是递归的效率较低)

递归三要素
  • 找规律

  • 找临界值(没有规律的值)return

  • 自己调自己(在函数内部调用自己的函数)

1) 2 4 6 8 10 第100的值是什么

function fn(n){ //一般情况都会有参数 n表示为位数
if(n==1){//没规律的(一般在前面或者后面)
    return 2 //返回具体的值
}else{ //有规律的 返回对应的规律的公式
    return fn(n-1)+2
}
  }
console.log(fn(100))

2)1 3 6 10 15 21 第100位 前一位+对应的位数 = 这个一位的值

function fn1(n){
      if(n==1){
       return 1
    }else{
    return fn1(n-1)+n
    }
    }
  console.log(fn1(6));

3) 1 2 3 5 8 13 21 第100位值(递归的效率极低 一般不使用递归 不推荐 (文件的遍历 菜单遍历 深拷贝))

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