js里,形参可以取任意名,不用事先声明吗

<script language="javascript">
    function check(form){
        if(form.user.value==""){
            alert("请输入用户名");form.user.focus();return false;        
        }
        if(form.pwd.value==""){
            alert("请输入密码");form.pwd.focus();return false;
        }
        form.submit();
    }

html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>博客用户登录</title>
<style type="text/css">
<!--
.style1 {color: #FF0000}
body{ font-size:12px;}
-->
</style>
</head>
<body>
<script language="javascript">
    function check(form){
        if(form.user.value==""){
            alert("请输入用户名");form.user.focus();return false;        
        }
        if(form.pwd.value==""){
            alert("请输入密码");form.pwd.focus();return false;
        }
        form.submit();
    }
</script>
<form name="form1" method="post" action="default.php">
  <table width="521" height="394" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td valign="top" background="images/login.jpg"><table width="521" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td width="262" height="218">&nbsp;</td>
            <td width="259">&nbsp;</td>
          </tr>
          <tr>
            <td height="24" align="right">用户名:</td>
            <td height="24" align="left"><input name="user" type="text" id="user" size="20"></td>
          </tr>
          <tr>
            <td height="24" align="right">密&nbsp;&nbsp;码:</td>
            <td height="24" align="left"><input name="pwd" type="password" id="pwd" size="20"></td>
          </tr>
          <tr align="center">
            <td height="24" colspan="2"><input type="submit" name="Submit" value="提交" onClick="return check(aa);">
            &nbsp;&nbsp;
            <input type="reset" name="Submit2" value="重填"></td>
          </tr>
          <tr>
            <td height="76" align="right"><span class="style1">超级用户:tsoft<br>
  密&nbsp;&nbsp;&nbsp;&nbsp;码:111&nbsp;&nbsp;</span></td>
            <td><span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;普通用户:zts<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;密&nbsp;&nbsp;&nbsp;&nbsp;码:000</span></td>
          </tr>
      </table></td>
    </tr>
  </table>
</form>
</body>
</html>

 

onClick="return check(form);"  这里的check(aa),form是实参名称,表单form的name值为form1,实参为什么不用form1,这样能传递值吗?

 

可以

你要问形参还是问实参啊?

你的代码中定义函数 function check(form){......} 中form是形参,
形参就等于函数内的局部变量,可以取任意名称,在函数执行时会自动声明。

在调用函数时check(aa); aa 是实参,
实参使用时必须在当前的作用域层级中存在。
作用域层级一般情况有当前函数作用域 》 全局作用域(也就是window对象) 

你的代码中当前函数作用域 和 全局作用域(也就是window对象)中都没有aa 就会报错。

上面说的是一般情况,但是在html标签中用 onClick="return check(form);" 方式设置的事件所生成的事件函数外会多包上两层或三层作用域。类似于:

with(document) {
    with(当前元素所在的form) {//只有当前元素是表单元素,并且当前元素包含在form内才会有这一层作用域
        with(当前元素 input) {
            当前元素.onClick = function(event){
                return check(form);
            }
        }
    }
}

这样在onClick事件函数中访问form关键字时,会先在onClick事件函数作用域中找,没有则往上一层作用域也就是当前元素的作用域中找。还没有则再往上一层中找。所有的作用域都没有时才会到全局作用域(window)中找。

你访问form时,由于当前元素input中就有一个form属性,就获取input元素的form属性作为实参了,
 

1.形参不用事先声明,可以随意起名,但是最好不要起一些特殊含义的名字。如default
2.onClick="return check(form)" 此处的form是实参,也是当前页面里的HTML DOM Form对象,而form1只是form表单的id属性值,form1也是Form对象的id属性,通过form.id 可以获取到“form1”,但使用form1并不能即刻获取到form对象,要使用对象里的属性/方法,只能使用form 对象。如获取form对象里的user值,就可使用:form.user.value,提交form表单可使用form对象里的方法:form.submit().

如果在当前元素中不止一个form属性,应该如何设置check()实参呢。是不是应该把表单form name作为实参?

这里的form属性指的是input元素的form属性,同一个元素不可能有多个form属性啊
onClick="return check(form);"
就等同
onClick="return check(this.form);" 其中this指向当前input元素
 

input元素的form属性获取的就是当前元素所在的form元素

我能使用form表单里的name或者id作为实参吗

你写form的name也可以
onClick="return check(form1);"
只不过这个form1是在document元素层作用域中找到的。
等同
onClick="return check(document.form1);"
 

正常情况建议怎么写呢?

正常情况建议
onClick="return check(document.form1);"
或者用元素id
document.getElementById('元素id')
直接写id也可以,因为有些浏览器中html元素的id是可以当做全局变量使用的。
不过这样对浏览器的兼容性不好,不推荐,使用id还是应该用document.getElementById()
 

真纠结,感觉两位大佬对我的疑问都很有帮助