JavaScript 包装函数的几种写法

var a = 2; // 声明全局变量a
( function foo (globel) {
    var a = 3;
    console.log(a); // 调用局部变量 3
    console.log(globel.a); // 调用全局变量 2
} 
( window ));
console.log(a); // 调用全局变量 2

  第二种写法和第一种很像:

var a = 2; // 声明全局变量a
( function foo (globel) {
    var a = 3;
    console.log(a); // 调用局部变量 3
    console.log(globel.a); // 调用全局变量 2
} )( window ); // 后面加这个括号是为了立即执行这个包装函数,并传入参数window
console.log(a); // 调用全局变量 2

  第三种是UMD模式(项目中被广泛使用,尽管这种模式略显冗长,但是更容易让人理解):

var a = 2;
  (function iife (def) {
    def(window);   // 2.执行def函数(def是被传入的函数),调用def函数并传入参数window.在下方执行代码块。
  })(function def (globel) { // 1.将def函数作为参数传入iife函数。
    var a = 3; 
    console.log(a); // 打印局部变量 3
    console.log(globel.a); // 打印全局变量 2
  });
  console.log(a); // 打印全局变量 2

  topic: 这样写的好处是不会污染外部作用域。 比如 function foo () {  ... } 这样的函数是可以直接在外部调用的; 但是(function foo () { ... })这样的函数声明就只能在{ ... }内部调用了。

 

转载于:https://www.cnblogs.com/phpcurd/p/9503143.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值