假设我有两个看起来像这样的函数:
function main(Index)
{
doStuff();
}
function doStuff()
{
if(Index == 1)
{
document.write("Hello world!")
}
}
还有一些HTML:
<input type="button" value="Click me" onclick="main(1)" />
我意识到这是使用特定功能变量等非常愚蠢的方式,但这只是出于好奇。那么是否可以将变量Index
从main
函数传递给doStuff
函数?
答案 0 :(得分:1)
那么可以将变量Index从main函数传递给doStuff函数吗?
不,不是没有明确地将其作为参数传递给doStuff
。 doStuff
需要接受参数,或者它可以使用arguments
集合:
function main(index)
{
doStuff(index);
}
function doStuff()
{
var index = arguments[0];
if(index == 1)
{
document.write("Hello world!")
}
}
答案 1 :(得分:1)
这是唯一的方法:
function doStuff(Index)
{
if(Index == 1)
{
document.write("Hello world!")
}
}
或使其成为全局变量
答案 2 :(得分:1)
为什么要将该调用转移到DoStuff
函数?
不是Main
对某个事件做出反应的重点,并且&#34;做事情&#34;?
如果是这种情况,您应该将该功能保留在Main
中,如下所示:
function Main(index){
switch (index){
case 1:
DoStuff();
break;
case 2:
DoStuff2();
break;
default:
DoStuff(); //Because, why not?
{
}
function DoStuff(){
document.write("Hello, world!");
}
function DoStuff2() {//something else happens here}
您没有使用Main
作为对象,因此不需要持久性(据我所知)。只要切掉不必要的电话,你的生活就会变得更简单。但是,如果你真的想要实现这种功能,你可以创建一个简单的闭包。它看起来像这样:
<input type="button" onclick="Main(1);" value="Do Something" />
<script type="text/javascript">
function Main(index) {
//This function only exists within the scope of Main
function DoStuff() {
//But now it has the added benefit of knowing about index
switch (index) {
case 1:
alert("Hello, world!");
break;
case 2:
alert("Not, really. I'm mad.");
break;
default:
alert("Hello, world!");
}
}
//Now Main is going to call it's internal function and...
DoStuff();
}
</script>
由于您在DoStuff
的正文中声明了Main
,这意味着DoStuff
存在于Main
的词汇范围内,并且可以访问其所有成员。闭包真的很强大,但很容易滥用它们。如果你真的需要这种功能,我建议走这条路,但除此之外,KISS(Keep It Simple Sir)。