2011-08-12 85 views
0

任何人都可以向我解释为什么下面的代码不能在一个函数内工作,但在一个函数之外它完美工作?document.forms.length函数内部返回0,函数外部工作正确

function aa(){ 
    document.forms.length; 
} 

从控制台运行它返回“不确定”,但是当我刚刚从控制台运行document.forms.length自己返回的页面表格的数量。我试图理解为什么这不起作用,但我无法找到它的原因。它发生在Firefox和Chrome上。我没有看到为什么这不起作用的理由。

编辑来澄清一些事情。

页面完成加载后,它从控制台运行。以下内容返回正确的值。

document.forms.length; 

因此我不知道它为什么这样做。

确定这里是测试HTML页面的确切来源。

<html> 
    <head> 
    <title>test page 01</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <body> 
    <form> 
     <input type="text" name="test1" /> 
    </form> 
    <form> 
     <input type="text" name="tes2" /> 
    </form> 
    </body> 
</html> 

正如你所看到的没有框架,只有普通的HTML和标签内的表单。

+0

你叫你的函数你的HTML已经呈现过吗? –

+0

它从控制台运行。页面完成运行后。我等到页面完成,然后我写它。我怀疑如果我将它放在一个函数中,它会起作用,因为document.forms.length在函数外部工作得很好。 – 133794m3r

+0

涉及的任何帧? – lonesomeday

回答

2

你在那里的功能不会返回任何东西(即当你运行它时,它会返回undefined)。试试这个:

function() { 
    return document.forms.length; 
} 

另外,如果你只运行在控制台,你仍然可以得到undefined,因为你还没有调用功能。你只是创建它,但它仍然没有被执行。

如果你想在控制台中运行它,你可以写

(function() { 
    return document.forms.length; 
}()); 

最后,如果你只写document.forms.length在控制台,控制台会显示你的价值,因为length是一个变量。所以这就是为什么这似乎工作。

+0

我原来的那个做了一个console.log,它在一个不同的函数中,仍然不想这样做。并且返回不会真正帮助未定义的值。 – 133794m3r

+0

@ 133794m3r:你原来的那个?如果你在控制台中写了'function(){console.log(document.forms.length);}',你仍然只是创建一个函数,而不是执行它。但是如果你编写'(function(){console.log(document.forms.length);}())'它会创建_and_执行该函数,并且它会在控制台中记录长度。我可以保证你的工作,因为我只是自己尝试 – Flambino

+0

那么为什么是下面的一个不工作。我原本以为这是与该功能本身有关。我有一个函数调用它,它总是说下面的变量“len”是0. var len = document.forms.length;它本身就是一个函数。我原本写这个想法是“功能内”是问题。现在我不知道如果我应该关闭这个并用一个完整的代码打开一个新的,或者将它永远留在这里。 – 133794m3r

0

这不回答为什么,但如果返回它,它的工作原理:

function aa(){ 
    return document.forms.length; 
} 
相关问题