将自调函数里的局部变量转化为全局变量

自调函数:和普通函数的区别时编译到该函数时立即执行,所以也叫立即执行函数。
它执行过后会销毁自己的执行期上下文。

(function (形参){
     代码块
})(实参)

局部变量和全局变量的区别

<script>
 var a = 10;//全局变量
 function zi(){
 var a = 5;//局部变量
 console.log(a);// 输出5;
 }
 zi();
 console.log(a);// 输出10
</script>
<script>
 var a = 10;
 function zi(){
 console.log(a);// 输出10;
 }
 zi();
 console.log(a);// 输出10
</script>
<script>
 var a = 10;
 function zi(){
 var a;
 console.log(a);// 输出undefined;
 }
 zi();
 console.log(a);// 输出10
</script>
<script>
 function zi(){
 var a = 5;
 console.log(a);// 输出5;
 }
 zi();
 console.log(a);// 报错Uncaught ReferenceError: a is not defined
</script>

从上面几个例子中我们可以看出当函数zi()中定义了变量a时输出函数中变量a的值;
当没有定义时输出函数外赋给变量a值(全局变量);当时只有函数里声明a时,函
数外是无法查询到这个值(没有声明过)所以会报错;

由于全局变量都存储在window对象里

<script>
 (function (win){
 var a = 5;// 声明并给变量a赋值
 win.a = a;// 将局部变量a存储到window对象里
 console.log(a);// 输出5;
 })(window)
 console.log(a); // 输出5
 </script>

或者

<script>
 (function (){
 a = 5;// 不声明给变量a赋值 
 console.log(a);// 输出5;
 })()
 console.log(a); // 输出5
 // 该方法无法在严格模式"user strict"下使用
 </script>
<script>
 var a = 10;//全局变量
 function zi(){
 a++;
 }
 zi();
 console.log(a);// 输出11
</script>

另外可以尝试看看上面这段函数思索闭包的形成原理
eg:

 <script>
    (function (window) {
      // 创造一个构造函数
      function Random() {
      }
      // 给构造函数的原型对象中添加方法 
      Random.prototype.getRandom = function (min,max) {
        return Math.floor(Math.random()*(max-min)+min);// floor向下取整
      };
      //把Random对象暴露给顶级对象window--->外部可以直接使用这个对象
      window.random=Random;//将函数名字给了属性Random
    })(window); 
    //用 new 实例化对象让他成为一个对象(可以打点调用里面的函数(方法))
    var rm=new window.random(); //window.可以省略  
    //调用方法产生随机数
    console.log(rm.getRandom(0,10));
    // var num=rm.getRandom();
    // console.log(num);
 </script>
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值