2020-09-10 函数

·ECMAScript函数:

       函数对任何语⾔来说都是⼀个核⼼的概念。通过函数可以封装任意多条语句,⽽且可以在任何地⽅、任何时候调⽤执⾏。ECMAScript中的函数使⽤function关键字来声明,后跟⼀组参数以及函数体。

函数的基本语法如下所⽰:

          function functionName(arg0, arg1,...,argN) {    

                    statements //封装的函数语句

          }

          functionName(a,b,......,k)

         :arg0, arg1,...,argN为形参,

                  a,b,......,k为实参,

                  参数如果有多个,可以⽤逗号隔开。

                  形参的类型由实参的类型决定。

                  形参这个占位符是等待未来传递过来实际值而设置的变量。

                  形参和实参都没有个数限制,并且将实参赋值给形参是按照顺序赋值的。

                  实参的个数不一定与形参的个数相同,且没有实参赋值的形参默认值是undefined。

                  如果实参的个数大于形参, 那么没有形参接受的实参将会被忽略。

          以下是⼀个函数⽰例:

                   function sayHi(name, greet) {

                            alert("Hello " + name + "," + greet);

                    }

                    sayHi("Ninxue", "how are you today?");

                    这个函数的输出结果是:"Hello Ninxue,how are you today?"。

                    函数定义中的命名参数name和greet被⽤作了字符串拼接的操做方式。

函数特性:

                     (1)函数内部的代码是相对封闭的,跟函数外的代码没什么关系。

                     (2)函数的作用是:用来封装功能。减少代码复用量。

                     (3)函数内部是相对独立的。

                     (4)有名函数:命名函数表达式:let fn = function () { },

                              即:用var , let等声明变量的方式将函数体赋值给一个变量名。

                              匿名函数:function fn () { } , 即:函数自命名的。

                              注:无论是有名函数还是匿名函数正常写法都需要进行函数调用 fn()。

                                     可多次调用同一函数,但是函数名不可重复命名。

                     (5)匿名函数自执行:

                                     IIFE:即时调用函数表达式,自执行功能。

                                     Es5的匿名函数自执行写法:

                                                         1. (function (){})()

                                                         2. (function (){}())

                                                         3. +function(){}()

                                                         4. -function(){}()

                                                         5. ~function(){}()

                                                         6. !function(){}()

                      例子:设计一个函数接收三个参数,如product(2,5,9),返回值是前两个数字大的那个数与第三个数字的乘积。

案例1

                      :javascript中的return是只能放在function中的,也就是说如果把上面的if/else放在一个function里就可以了。再或者,把return写成闭包就好了。

案例2

                                    

Es6的匿名函数自执行写法例子:

                                     块作用域自执行控制台输入密码关键字password无法访问输入的密码值。

                                               { // 块作用域

                                                    let pwd = document.getElementById('pwd')

                                                    let btn = document.getElementById('btn')

                                                    let password = "" // 用来存储用户的密码

                                                    btn.onclick = function () {

                                                           password = pwd.value

                                                           // console.log(password)

                                                    }

                                               }


函数的参数:

                        命名的参数只提供便利,但不是必需的。

                        函数声明时,定义的占位形式参数:形参。调用时传入的实际参数:实参。

                        形参:用于接收函数在调用时,传入的实际数据,命名规则跟变量的命名规则统一。

                        实参:函数调用时传入的实际数据,该数据会被自动传给对应位置的形参。

                        形参的默认值:直接在形参后写等号,有默认值的形参必须出现在没有默认值

                        的后面。否则会出错。

                        :函数整体可以作为另外一个函数的参数。

理解参数


不定参arguments:

         1.arguments:是函数内部的一个关键字,用于接收所有的实参,在ES6后取消了arguments。

         2.arguments 是一个类数组,有length属性。

         3.可以通过访问arguments对象的length属性可以获知有多少个参数传递给了函数。

         4.使用例子:

                            function add () {

                                   var res = 0;

                                   for(var i = 0; i < arguments.length; i++){

                                         res += arguments[ i ]

                                   }

                                   console.log(res)

                            }

                            add(1,2)       // 3

                            add(1,2,3)    // 6

                            add(2,3,5,6)   //16

         5.在ES6里没有不定参arguments,取而代之是剩余参数。

            注:剩余参数只能出现在函数的最后一个形参的位置上。

            例如:

                     function add (a,b,...rest) {

                            console.log(rest)

                     }

                     add(1,2)       // [ ]

                     add(1,2,3)    // [3]

                     add(1,2,3,4,5)   //[3,4,5]


返回值:

                1、return 返回值到外界。

                2、如果函数内出现return,则当代码执行return语句时,会立刻停止函数执行,

                      并返回return后面的值给外界。

                3、一个函数内可以写n多个return, 但是一个函数内只有第一个return会执行。

                4、当函数内没有写return时,函数执行结束后默认return undefined。


递归方法:

                       递归:一个函数平凡调用自身。

                       递归的规律:先执行的最后执行完。

                       例子:

                注:虽然递归的规律求值可以用for循环来编写,但是也可以用于一些特殊情况简化代码。


函数声明的提升(预解析):

JS执行过程:先预编译(解析)过程,再把所有的函数声明都提升到最开头,然后再按顺序执行。

               注:函数声明会被提升,但是函数表达式却不会被提升。

                 1.函数声明的方式定义一个函数:

                                                                     function fn() {}

                2. 函数表达式的方式定义函数:

                                                                   var fn = function () {}

                3. 函数类型:为引用数据类型 function


变量提升特点

            注:如果变量名和函数名重名的话, 以函数为优先。正常情况下给同一个变量赋予不同的值,都是后面的值覆盖前面的值。

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