JavaScript总结6

本文详细介绍了JavaScript中的函数,包括函数声明的两种方式,函数提升的概念,函数内部的arguments属性和this的指向规则。还讨论了立即执行函数、作用域(全局、局部、块级)、作用域链以及闭包的原理和应用场景。此外,提到了函数调用方法和函数作为参数或返回值的使用。
摘要由CSDN通过智能技术生成

1.函数声明  

    方式:

        1.function关键字

            function add(a, b) {return a + b}

        2.函数表达式  匿名函数赋值给变量

            var sum = function (a, b) {console.log(a+b);}

    特点:

        1.函数体执行到return结束 没写return 执行到}结束 return 后面不写代码

        2.函数内部不写返回值 返回undefined

        3.一般情况下 写在return后的代码不生效 变量提升除外

2.函数提升

    函数会提升到当前作用域得最顶部 var声明变量会提升到当前作用域顶部

3.函数的内部属性

    1.arguments  属性 专门用来保存实际参数列表的类数组对象

        arguments内部属性 callee  仅当相关函数正在执行时才可用。 可以用来实现递归实现

        将类数组对象转为数组对象

            1.Array.from() 将类数组对象转为数组

                console.log(Array.from(arguments));

            2.使用拓展运算符

                console.log([...arguments]);

    2.this属性

        1.this 是函数赖以执行的环境对象

            1.关注this被谁拥有

            2.关注拥有this方法被谁调用 this就指向谁

        2.this指向:

            1.单独使用this this在nodejs指向当前模块{} 在浏览器指向全局对象window

            2.函数内部使用this this指向全局对象 global window

            3.方法中使用this this指向拥有该方法的调用者

            4.事件中使用this this指向接收事件的元素

            5.显示函数绑定时,可以更改this指向

        3.修改this指向

            1.call(执行环境对象,实参列表)

                obj1.sayName.call(obj,1,2);

            2.apply(执行环境对象,[实参列表])

                obj1.sayName.apply(obj,[1,2]);

            3.bind(执行环境对象,实际参数)(实际参数)

                console.log(obj1.sayName.bind(obj,1,2));

4.立即执行函数   函数声明时也同时就立即执行

    特点:

        1.页面加载的时候会立即执行一次

        2、拥有局部作用域,变量不会泄露

    声明形式

        1.立即执行函数 (匿名函数(){形参})(实参)

            (function (a,b) {console.log('我是立即执行函数',a,b);})(1, 2)

        2.var res = ((function (a) {console.log('我是立即执行函数2', a)})('hello'))

5.作用域

    块级作用域 if(){} for(){}

    函数内作用域 (局部作用域) 函数内部得变量函数外部是无法获取 不适用var声明得变量也是全局变量 a = 10;

    函数外得作用域 (全局作用域) 函数内部可以获取函数外部得变量

        var a = 1;

        function foo(){

            var a;

            console.log(a,'第二次');// undeifned

            a = 2;

            console.log(a,'第三次');//2

            var a = 3;

            console.log(a,'第四次')//3

        }

        console.log(a,'第一次');//第一行代码 1

        foo();

        console.log(a,'第五次');//1

6.作用域链

    作用域链:自由变量沿着作用域追层向上寻找的过程构成了作用域链

    自由变量:当前作用域中本身没有这个变量,但是想要获取到该变量对应的值

        var a = 10;

        function foo(){

            var b = 20;

            function fn(){

                var c = 30;

                console.log(a); //自由变量

                console.log(b); //自由变量

                console.log(c);

                console.log(d);

            }

            fn()

        }

        foo();

7.函数调用方法

    函数调用得方式

        1.函数名()

        2.call();

        3.apply()

        4.bind()()

8.函数的应用

    1.函数可以作为参数 回调函数  主函数先执行,回调函数再执行

        function foo(x,y,callback) {console.log(x, y);callback(3,4)}

        function fn(a, b) {console.log(a,b);return a+b}

        foo(1, 2, fn)

    2.函数作为返回值

        function A(){

            var a = 10

            return fuction(){

                a--

                console.log(a)

            }

        }

        A()()

9.闭包

    闭包:函数内部作用域可以访问函数外部作用域的变量或方法  

        function foo() {

            let a = 10

            function fn() {a--;console.log(a);}

            return fn;

        }

        var res = foo()

    词法作用域:内部函数需要访问函数外部中的变量或方法

    产生条件:

        1.嵌套函数

        2.函数内部存在对函数外部变量引用

        3.变量不会被回收机制回收 缓存变量

    优点:

        1.不会污染变量  变量会被维持缓存

    缺点:

        1.造成内存泄漏  造成性能问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值