作用域与闭包

执行上下文
    范围:一段<script>或者一个函数
    全局:变量定义、函数声明 (一段<script>)
    函数:变量定义、函数声明、this、arguments (函数)
    PS:注意“函数声明”和“函数表达式”的区别
    console.log(a);
    var a = 100;
    fn('zhangsan');
    function fn(name) {
        age = 20;
        console.log(name, age);
        var age;
    }
this
    this要在执行是才能确认值,定义是无法确认
        var a = {
            name: 'A';
            fn: function () {
                console.log(this.name);
            }
        }
        a.fn();     // this === a
        a.fn.call({name: 'B'});     //this ==== {name: 'B'}
        var fn1 = a.fn;
        fn1();      //this === window
    
    作为构造函数执行
        function Foo(name) {
            this.name = name;
            return this;
        }
        var f = new Foo('zhangsan');


    作为对象属性执行
        var obj = {
            name: 'A';
            printName: function (){
                console.log(this.name);
            }
        }
        obj.printName;


    作为普通函数执行
        function fn() {
            console.log(this);
        }
        fn();


    call apply bind
        function fn1(name, age) {
            alert(name);
            console.log(this);
        }
        fn1.call({x: 100}, 'zhangsan', 20);


作用域
    没有块级作用域
    只有函数和全局作用域
作用域链
闭包
    闭包的使用场景
        函数作为返回值
            function F1() {
                var a = 100;


                //返回一个函数(函数作为返回值)
                return function () {
                    console.log(1);
                }
            }
            //f1得到一个函数
            var f1 = F1();
            var a = 200;
            f1();


        函数作为参数传递
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值