js的一些概念

全局预处理与执行

处理函数声明有冲突,会覆盖
处理变量声明时有冲突,会忽略

闭包
闭包是词法闭包的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境变量也不例外。所以,有另一种说法认为闭包是由函数和与之相关的引用环境组合而成的实体。

function f1(){
        var a=10;
        var b=20;
        function f2(){
            console.log(a);//子函数访问父函数
        }
        f2();
    }
    f1();

闭包的好处

减少全局变量
减少传递给函数的参数数量
封装

    // var a=0;
    // function add(){
    //     a++;
    //     alert(a);
    // }
    // add();
    // add();


// //减少全局变量
//     function f(){
//         var a=0;
//         return function(){
//             a++;
//             alert(a);
//         }
//     }
//     var result=f();
//     result();
//     result();


// //减少传递给函数的参数数量
// function calFactory(base){
//     return function(max){
//         var total=0;
//         for(var i=1;i<=max;i++){
//             total+=i;
//         }
//         return total+base;
//     }
// }
// var adder=calFactory(2);
// alert(adder(3));

//封装
(function(){
    var m=0;
    function getM(){
        return m;
    }
    function setM(val){
        m=val;
    }
    window.g=getM;
    window.f=setM;
})();
f(12);
alert(g());

闭包需要注意的点

对捕获的变量只是个引用,不是复制
父函数没调用一次,会产生不同的闭包
循环中问题


// //引用
// function f(){
//     var num=1;
//     return function(){
//         num++;
//         alert(num);
//     }
// }
// var result1=f();
// result1();
// result1();
// var result2=f();
// result2();
// result2();


// for(var i=1;i<=3;i++){
//     var ele=document.getElementById(i);
//     ele.οnclick=function(){
//         alert(i);
//     }
// }
var i;
for(i=1;i<=3;i++){
    var ele=document.getElementById(i);
    ele.onclick=(function(id){
        return function(){
        alert(id);
    }
    })(i);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_Huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值