js的函数和匿名函数和作用域

博客介绍了 JavaScript 相关知识,包括匿名函数,即没有名字、通过函数表达式声明的函数;调用函数时浏览器传递的隐含参数 arguments;还提及块级作用域、隐式全局变量、全局变量、作用域链以及预解析等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.匿名函数

概念:没有名字的函数

  匿名函数的自调用:第一种(function(){
                            ...
                        })();
                    第二种(function(){
                            ...
                        }());

通过函数表达式声明的函数

    函数表达式声明:
        var getDay=function(){...};
    //通过函数表达式声明的函数,调用时,getDay()----代表返回值
                                     getDay-----代表的为整个函数体

二.arguments

在调用函数时,浏览器每次会传递进两个隐含的参数
-----------上下文对象,this
-----------arguments

arguments:是一个伪数组,用户输入或传递参数的集合,在函数内部存在
		   可获取用户输入的值和传多少参数,即可以提取实参,存储起来,拥有长度
		     function getSum(){
                    var sum=0;
                    for(var i=0;i<=arguments.length-1;i++){
                        sum+=arguments[i];
                    }
                    return sum;
                }
                console.log(getSum(1,2,3));   //6

三.作用域

**概念:变量可以起作用的范围**
----------全局变量:var声明----可以在程序的任何地方声明,除了函数
----------局部变量:作用于局部的范围,eg:在函数内声明的变量,只能作用于函数的内部,并不
                              能作用于其他位置

块级作用域:

 块级作用域: 任何一对{..}中包含的就是块级作用域,现阶段js可以被看作并没有块级作用域
                    eg:{..}声明的变量在括号外仍然可以被使用,,,函数除外!!!!
                ////函数内--var--声明的变量只能作用于函数内部,函数外并不能被使用
                    没有用“var”声明的变量------会成为全局变量(隐式全局变量)

隐式全局变量和全局变量

隐式全局变量:没有用var 声明的变量----------num=12;
全局变量:在全局作用域中用var 声明的变量--------var  num=12;
 ---隐式全局变量------可被删掉---delete (变量)----- 
 ---全局变量----并不能被删除。除非页面关闭-----无用的全局变量可能会造成内存泄漏

作用域链

作用域链是函数被创建的作用域中对象的集合,其中的对象是包括-----,
-----作用域中的变量对象(声明的变量),局部的变量对象,全局的变量对象
eg:
                全局作用域---0级作用域
                函数内部---1级作用域
                函数内部的内部---2级作用域
            //变量会从当前的作用域往外查找,找到离之最近的作用域中查找此变量是否声明,
                             -----有,直接输出,没有,接着往外查找(父级作用域)
            function f1(){
                var num=10;
                function f2(){
                    var num=20;
                    function f3(){
                        var num=30;
                    }
                    f3();
                }
                f2();
            }
            f1();

预解析:

浏览器在解析js代码时会提前将变量的声明和函数的声明提升到 
---------------当前作用域的最前面,但并不会将其赋值提升
                console.log(num);  ////undefined
                var num=10;
                cosole.log(num);   ////10

                f1();              //输出----函数
                function f1(){     //将函数声明提升到最前面
                    cosole.log("函数");
                }
                转变成:
                function f1(){
                    console.log("函数");
                }
                f1();

                f2();     //将会报错!!!!,并没有f2()此种写法
                var f2=function(){...};
                转变成:(将var f2提升到作用域的最前面去,此时并没有给f2赋值为函数)
                var f2;
                f2();
                function(){...};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值