如何在JavaScript内部调用外部函数?

如何在JavaScript内部调用外部函数?

问题描述:

我相对较新的JavaScript,所以这可能有点微不足道。但我似乎无法找到这个问题的答案。如何在JavaScript内部调用外部函数?

假设我有一个带有函数的JavaScript文件(bar.js),名为foo()。我想在脚本标记内调用这个函数(foo)。我希望它能像这样工作。

<script type="text/javascript" src="bar.js"> 
    foo(); 
</script> 

我不能得到这个工作。我用浏览器运行了JavaScript控制台,它似乎在做什么......没有。没有语法错误或任何东西。

我可以运行一个类似的功能,只需点击按钮...使用上面的脚本标签和这个。

<button type="button" onclick="foo();">Click Me</button> 

我可以这样做,但在实际情况下,我需要将参数传递到按钮单击时调用的函数。我也无法得到那些认可。我确信这与范围有关。

我想这是像这样的方式......

<script type="text/javascript" src="bar.js"> 
    var a = "blah"; 
    var b = "blab"; 
</script> 

.... (some more html) 

<button type="button" onclick="foo(a,b);">Click me </button> 

在这里,我得到一个是不确定的。这导致我认为这是一个范围问题。脚本标签位于头部,按钮位于主体部分。你可以把脚本标签放在头部和身体标签之外来制作全局数据吗?

感谢您的帮助提前。

我以前从未使用过jsfiddle,并且无法正常工作,所以我只需在此处发布示例代码。

<html> 
    <head> 
    <script type="text/javascript" src="bar.js"> 
    </script> 
    <!--From what yall say I should have another script 
     tag here for anything else. Say some variable?--> 
    <script type="text/javascript"> 
     var a = "hello"; 
     var b = "text"; 
    </script> 
    </head> 
    <body> 
    <!--This should work now?--> 
    <button type="button" onclick="foo(b,a)"> 
     Click me 
    </button> 
    </body> 
</html> 

bar.js内容:

function foo(id,string){ 
    document.getElementById(id).innerHTML = string; 
} 

我得到了这个工作。 谢谢大家。

+0

你可以发布你在jsfiddle中试过的代码吗? – Bioto 2015-01-26 21:28:43

+1

相关:[内联脚本与SRC属性?](http://*.com/questions/1056325/javascript-inline-script-with-src-attribute) – 2015-01-26 21:36:55

您需要首先包括含有功能的JavaScript:

<script type="text/javascript" src="bar.js"></script> 

,然后调用它另一脚本标签:

<script type="text/javascript"> 
    foo(); 
</script> 

在你的榜样,你似乎已经混合2个概念放到一个无效的单个脚本标记中:包含一个外部JavaScript文件并在脚本标记的主体中写入您的代码。

按照specification

脚本可以SCRIPT元素或 的内容内在外部文件中定义。如果未设置src属性,则用户代理必须将元素的内容解释为脚本。如果src的URI值为 ,则用户代理必须忽略该元素的内容并通过URI检索该脚本的 。

所以基本上你应该避免这种情况,并有单独的脚本标记包含外部文件和写入内联js。

+0

所以你不能链接和调用相同的脚本标记? – 2015-01-26 21:30:55

+1

这并不能解释为什么从按钮调用它的版本不起作用。 – Quentin 2015-01-26 21:31:07

+1

不,你不能,你应该在2个独立的脚本标签中做到这一点。 – 2015-01-26 21:31:21