文盲的 JavaScript 经验谈之三:认识 arguments




在讲解 arguments 之前,我们先来个小思考,浏览器把变量都存放在哪了?

比如我在某个页面内声明了一个变量 var a = 1;,这个 a 存放在什么地方了呢?不要告诉我说在内存中,这是废话。。。。

文盲的理解是存放在 frames 里。。。。为什么这么说呢?

比如我们直接写一个页面 a.html

 <html>
 <script>
 var a = 1;
 </script>
 </html>

我们在地址栏输入指令:javascript:alert(window.a);,可以看到会有一个弹出的结果 1;

而在另一个页面中,我们这么写 b.html

 <frameset rows="42,*" framespacing=0 border=1 frameborder=0>
    <frame name=banner src="a.html" noresize scrolling=no>
    <frameset cols="160,*">
        <frame name=menu src="a.html" scrolling=auto noresize>
        <frame name=main src="a.html" scrolling=auto>
    </frameset>
    <noframes>
    </noframes>
 </frameset>

同样,我们在地址栏输入指令 javascript:alert(frames[0].a);,同样可以看到会有一个弹出的结果 1;

那么文盲的感觉就是,在第一个例子中,没有定义框架,那么框架就是 window 本身

而在第二种情况下,每一个 frame 都有单独不同的变量存放结果,你可以任意定义修改各自 frame 中的数据而不会混乱,所以文盲认为,公共变量是存放在 frames 中

同样,我们定义的 function 也存放在该区域内,比如我们就可以在 iframe 中调用 iframe 外的方法 parent.forms[0].submit(); 或者在一个 frame 里调用另一个 frame 里的方法 window.frames[2].document.forms[0].submit();

以上为文盲的胡言乱语,欢迎大家批判

----------------------------------------------------------------------------------------------------------------------

arguments ,根据字面的意思,就可以理解为参数集合,在 JS 中,每定义一个 function 则必定有一个该 function 内部的 arguments

比如我们做一个很简单的函数,取一个随机数:

 <script>
 function rnd(){
   if (arguments.length > 0){
      if (arguments[0] * 1 != arguments[0]){
         return Math.random();
      }else{
         return Math.floor(Math.random() * arguments[0]);
      }
   }else{
      return Math.random();
   }
 }
 </script>

在这里, rnd 函数可以有两个使用方式,一是没有任何参数,或第一个参数不是合法的数值型表达式的情况,返回 0 到 1 之间的随机小数,另一个是有参数,且第一个参数为合法的数值表达式,则返回 0 到该表达式值之间的随机整数;

这里就是根据 arguments 集合来判断是否是参数传递进来的

我们可以在页面内定义个测试用的函数,来看一下 arguments 集合的信息

 <script>
 function testArguments(){
    var n = '本次共传递了 ' + arguments.length + ' 个参数;/n/n参数集合为:/n';
    for (var i = 0 ; i < arguments.length ; i ++ ){
        n += '/n 参数 ' + i + ' 为:' + arguments[i];
    }
    alert(n);
 }
 </script>

在地址栏输入指令: javascript:testArguments(1,new Date(),document.body,[1,2,3]); 进行测试

arguments 对于不确定的参数个数的函数定义具有很有效的处理办法

比如文盲在表单校验的时候经常使用的一个小函数

 <script>
 function checkForm(){
    var obj = arguments[0];
    for (var i = 1;i <= arguments.length / 2 ; i ++ ){
        if ((obj.elements[arguments[i * 2 - 1]].value=='')||isSpace(obj.elements[arguments[i * 2 - 1]].value)){
            alert(arguments[i * 2]);
            obj.elements[arguments[i * 2 - 1]].focus();
            return false;
        }
    }
    return true;
 }
 </script>
 <form οnsubmit="return checkForm(this,'name','姓名不能为空','pwd','密码不能为空');">
 姓名:<input type="text" name="name" /> 密码:<input type="password" name="pwd" />
 <input type="submit" value="提交" />
 </form>


isSpace 是一个自定义函数,主要是检测表达式的值是否全是由空格组成的,这样在表单校验的时候,我们就可以直接对 checkForm 添加很多的参数进行校验,而不必再单独为每一个文本输入框去书写校验代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

文盲老顾

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

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

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

打赏作者

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

抵扣说明:

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

余额充值