js 参数 undefined 小记

今天看jquery发现其框架参数传递很有意思(1.4.0以上版本)

(function( window, undefined ) {
    //中间代码
})(window);

一般分析步骤:
1、词法分析
   1.1 形成临时活动对象 AO {}
   1.2 分析形参,参数作为 AO 属性,值为undefined,AO {window:undefined,undefined:undefined}
   1.3 接收实参,AO {window:window,undefind:undefinde}

很明显执行的时候传入的参数少一个,查了一些资料:

原因:一些旧版本浏览器(IE5-,FF等)undefined竟然可以重新赋值,如undefined=3;

        声明undefined局部变量又不传参数,值自然是undefined,防止了外界对undefined的污染。

传window的原因是加快内部查找变量的速度,关于window还有点疑问,先不写了

下面是chrom写的undefined的小测试

      var undefined = "hello world";
      var a;
      if (a == undefined){
        console.log("ok2");
      }
      console.log(a);
      console.log(undefined);//输出 undefined

输出:

ok2

undefined

undefined

很明显我最新的chrom中普通undefined已经不能被重定义了

但是无聊的我发现匿名函数中依然可以

    (function(window,undefined){

      var undefined = "hello world";
      var a;
      if (a == undefined){
        console.log("ok1");
      }
      console.log(a);
      console.log(undefined);//输出hello world

    })(window);

输出:

undefined

hello world

结论:匿名函数判断变量undefined有风险,想判需谨慎。


转载于:https://my.oschina.net/lantianbaiyun/blog/420487

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值