08-javaScript基础-函数(2)

文章配套视频

函数使用注意

1. 在调用函数时,可以在()中指定实参,  实参将会赋值给函数中对应的形参

2. 调用函数时解析器不会检查实参的类型,   所以开发中一般需要对参数进行类型的检查

3. 函数的实参可以是任意的数据类型

4. 调用函数时,解析器不会检查实参的数量, 多余实参不会被赋值, 

   如果实参的数量少于形参的数量,则没有对应实参的形参将是undefined

arguments对象

包含了传入函数中的所有参数,  arguments并不是一个数组,

只是与数组相似,  除了拥有length属性,

数组的所有属性和方法都不具备。

arguments对象还有一个名叫callee的属性, 
该属性是一个指针,  指向拥有这个arguments对象的函数;

length属性

函数形参的个数

函数返回值(return)

1)当一个函数被调用,通常会从函数的开始执行到结束。

2)如果想提前结束该函数的执行可以使用return语句,return语句后面的所有语句将永远不会执行。

3)一般return用于返回结果。

4)注意
  如果函数没有显示的使用 return语句 ,那么函数有默认的返回值:undefined

  如果函数使用 return语句,那么跟再return后面的值,就成了函数的返回值

  如果函数使用 return语句,但是return后面没有任何值,那么函数的返回值也是:undefined

  推荐的做法是要么让函数始终都返回一个值,要么永远都不要返回值。

函数直接声明和函数表达式声明的区别

JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面

//  代码没问题  
console.log(f(5,6));
function f(a, b) {
     return a + b;
}

// 报错
myFun(6,7);
var myFun = function (a,b){
   return a + b;
}

匿名函数

没有命名的函数:function () {}

作用:
用在绑定事件的时候
document.onclick = function () {
        alert(1);
 }

定时器
setInterval(function () {
        console.log(444);
},1000);

立即执行函数
1)函数定义完,立即被调用,这种函数叫做立即执行函数

2)立即执行函数往往只会执行一次

3)(function(){alert("hello")})();

4)(function(num1,  num2){
    console.log("mum1 = "+ num1);
    console.log("num2 = "+ num2);
})(100, 101);

函数是一种数据类型

console.log(typeof fn);
console.log(typeof fn());

归根结底,它还是属于object

回调函数

1)回调函数就是一个通过函数调用的函数。
2)如果你把函数的指针(地址)作为参数传递给另一个函数,
当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
3)一般用于递归
4)经典案例
    求Fibonacci的第n个数
    1 1 2 3 5 8 13 21...
        function f1 (n) {
              if (n == 1) return 1;
              if (n == 2) return 1;

              return f1(n-1) + f1(n-2);
          }

          console.log(f1(7));

求n个数的累加

        function getSum (n) {
            if (n == 1) { return 1;}
            return n + getSum(n - 1);
        }

        console.log(getSum(100));

从前有座山,山里有座庙, .....
        var i = 100;

        function f1 () {
            i--;
            //递归的结束条件
            if (i >= 0) {
                console.log("从前有座山,山上有座庙" + i);
                //递归调用
                f1();
            }

        }
        f1();

变量的作用域

块级作用域

在其它语言中,任何一对花括号中的语句都属于一个块,在这之中定义的所有变量在代码块外都是不可见的

全局变量

定义在script或者不属于某个函数的变量

局部变量

定义在函数内部的变量

注意:
函数内部可以访问到该函数所属的外部作用域的变量(作用域链)
不使用var声明的变量是全局变量,不推荐使用(XXXX)
变量退出作用域之后会销毁,全局变量关闭网页或浏览器才会销毁

作用域链相关


题目1:
       {
            var num = 5;
       }
        console.log(num);

题目2:
       var num = 5;
       if (num > 3) {
            var sum = 7;       
        }
        console.log(sum);

其它语言中变量i只能在for循环内部访问(局部变量)
        for (var i = 0; i < 10; i++) {

        }
        console.log(i);

全局变量:
        var name = "旋之华";
        function f() {
            name = "刘德华";
        }
       f();
       console.log(name);

局部变量, 先在函数内部的作用域找变量name,如果找到则使用,如果找不到去父级作用域找name变量
        function f() {
            var name = "撩课学院";
        }
        f();
        console.log(name);

作用域链:
        var color = "yellow";
        function getColor() {
            var anotherColor = red";

            function swapColor() {
                var tmpColor = color;
                color = anotherColor;
                anotherColor = tmpColor;
            }
            swapColor();
        }

        getColor();
        console.log(color);

变量提升

变量提升:
定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升。
函数提升:
JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面

面试相关

     var num = 10;
        fun();
        function fun(){
            console.log(num);
            var num = 20;
        }

      var a = 18;
        f1();
        function f1(){
            var b=9;
            console.log(a);
            console.log(b);
            var a = '123';
        }

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

推荐阅读更多精彩内容

  • 苦逼赚钱靠能力! 轻松赚钱靠合作! 互联网是一个很好的创业平台: 1、成本低 2、风险低 3、机会多 可为什么有那...
    杨育新阅读 281评论 0 0
  • 文:盼盼 有一句话说,每个男人恨不得享尽天下美女,而每个女人恨不得穿尽天下华服。 所以我也不例外,每天...
    盼盼00128阅读 334评论 0 0
  • 相当小的一个信息层级进化的例子。 KEEP锻炼完后提交心情的界面,从埋藏在白色元素里,到用底色强调,聚焦了。 be...
    DanisUX阅读 310评论 7 1
  • 打开联系人,有了联系方式也联系不到的朋友。朋友。…
    阿棋zZ阅读 133评论 0 0
  • 从沈阳离开的那天 我选择在了深夜 因为我怕白天 没有勇气离去 再和你分割两地 来到沈阳这个地方 因为在这里 有漫天...
    遇见Luck阅读 757评论 21 25