作用域 立即执行函数 闭包 逗号运算符

<script type="text/javascript">
    //AO GO 作用域 作用域链产生的一切问题
    /*
    AO -> function 独立的仓库(作用域)
    每个函数都有GO
    全局执行的前一刻 开始预编译 产生GO-》函数声明已经定义  已经存在作用域及链
    然后开始全局执行 修改GO的内容
     */

    //对象
    var obj={
        name:'hui',
        add:'武汉'
    }
    //函数也是一种对象类型 引用类型 引用值 test.name test.length test.prototype
    //对象 -》 有些属性是外卖无法访问的 js内部的隐式属性
    /*
    函数创建时,生成一个隐式属性
    函数存储的域链的容器 作用域链
    函数执行玩后AO要销毁 AO是即时的存储容器
     */
    function test(a,b){}

    //闭包
    /*
    当内部函数被返回到外部并保存时 一定会产生闭包 闭包会产生原来的作用域链不释放 过度闭包可能导致内存泄露 或加载过慢

     */

    //立即执行函数 执行后立即释放
    //IIFE
    /*
    方式一: (function(){}());//w3c建议
    方式二:(function(){})();
     */
    console.log("-------------------");
    (function aa(a,b){console.log(a+b)})(2,3);//可有实参  也可以有返回值
    //(function aa(a,b){return a+b;})(2,3);
    //()里面的内容(函数) 已经转发为表达式 也就是说立即执行条件是 *表达式*
    /*
    function aa(a,b){console.log(a+b)}(2,3);不可被执行 缺少()包裹
     */
    console.log("----------------");
    var bb= function (){console.log("1234")};
    console.log(bb);//ƒ (){console.log("1234")}
    var bb1= function (){console.log("1234")}();//会输出1234 执行后被销毁
    console.log(bb1);//另起一行 undefined
    /*
    (function test(){}());
    (function (){}());
    函数有无名称意义不大 因为函数已经转变为表达式
    函数申明变为表达式的方法 + - !|| &&    ->  比如: + function (){}();
     */
    //关于‘ ,’逗号其实是一个运算符
    var num=console.log(1+2,2+3);
    console.log(num);//只会返回逗号后面的内容
    function aa1(a,b){console.log(1)}(6);//()如果没有内容会报错 立即执行函数语法错误 如果有参数则默认为(6)为表达式 即使写法有错误
    console.log("----------------------")
    function biBao(){
        var arr = [];
        for (var i=0;i<5;i++){
            //立即执行函数
            (function (j){
               arr[j]=function (){
                   document.write(j+' ');
               }
            }(i));
            //以下不是立即执行函数
            /*
            arr[i]=function (num){//num的取值被覆盖
                document.write((num+1)+' ');
              */
               // console.log(num);//01234
                // function N(num){
                //     console.log(num);//undefined
                //     document.write((num+1)+' ');//NaN
                //     console.log(num);//undefined
                // }
                // N();
            }
        }
        return arr;
    }
    var myArr = biBao();

    for (var j=0;j<5;j++){
            //外部借用
        myArr[j](j);//12345
    }
    console.log("---------------------");




</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值