什么/为什么这个代码泄漏?

时间:2011-07-07 00:22:10

标签: javascript debugging

我被告知此代码在此previous post

中泄漏了a1,a2,a3
function t1()
  {
  var a=document.forms['f1'].elements;
  a1="Please fill out all fields";
  a2="Please enter your name using only letters and dashes";
  a3="Please enter a valid email address";
  a4="Password must be atleast 6 characters";
  if(c0(a,a1,'fb2')&&c1(a,a2,'fb2')&&c2(a[2],a3,'fb2')&&c3(a[3],a4,'fb2'))
    {
    return 1;
    }
  else
    {
    return 0;
    }
  }

1 个答案:

答案 0 :(得分:2)

似乎在上一篇文章中,“泄漏”指的是变量a1a4未在函数t1()的范围内正确声明的事实。如果没有var关键字,它们就会成为全局变量。

var a1="Please fill out all fields";
var a2="Please enter your name using only letters and dashes";
var a3="Please enter a valid email address";
var a4="Password must be atleast 6 characters";

您可能打算使用逗号,而不是分号;来结束每一行,这会将它们全部链接到共享第一个var关键字的单个语句中。在这种情况下,它们不会成为全球性的。请务必使用;终止最后一个。但是,我认为如上所述,将每个语句作为自己的语句更具可读性和更好的实践。

有很多关于JS变量泄漏的博客文章。 Here's one I just found to get you started...