Javascript函数传递

时间:2011-10-28 08:58:18

标签: javascript html

我有以下问题。我需要将hello函数传递给name,然后调用它。但我得到错误,你好不是一个函数。

<html>
    <head>
        <title>D</title>
        <script type="text/javascript">
            hello = function(){
                alert("hello! I'm called") ;
            }
        </script>
    </head>

    <body>
        <script type="text/javascript">
            name = function( hello ) {
                hello() ;
            }
            name();
        </script>
    </body>
</html>

5 个答案:

答案 0 :(得分:6)

您在hello中定义了一个名为name()的参数,但是您在没有参数的情况下调用name(),因此helloname()的上下文中未定义}。在您致电name()时传递参数,或完全删除参数:

name = function (hello) {
    hello();
}
name(hello);

name = function() {
    hello();
}
name();

答案 1 :(得分:5)

name内,hello会引用参数 hello。当您在不传递任何参数的情况下调用函数时,helloundefined

将函数作为参数传递

name(hello);

或省略参数规范,以便hello引用全局变量:

name = function() {
    hello();
};

您应避免使用全局变量,以免它们与window属性或其他库发生冲突。您可以将对象用作命名空间:

var myNameSpace = {};
myNameSpace.hello = function...
myNameSpace.name = function...

答案 2 :(得分:2)

您的代码存在两个问题。

  1. 您无法声明variable类中已存在的Window名称。
  2. 您的姓名function包含由hello函数命名的参数。为此,您需要传递一个函数委托才能实现此目的。
  3. 看看下面的完整代码:

    <html>
        <head>
            <title>D</title>
            <script type="text/javascript">
                var hello = function(){
                    alert("hello! I'm called") ;
                }
            </script>
        </head>
    
        <body>
            <script type="text/javascript">
                var nameFunc = function( helloDelegate ) {
                    helloDelegate() ;
                }
                nameFunc(hello);
            </script>
        </body>
    </html>
    

答案 3 :(得分:1)

我会完全改变它:

function hello(){
    alert("hello! I'm called");
}

function name(hello) {
    hello() ;
}

name(hello);

无需像往常一样将函数分配给变量。

就像其他人所说的那样,主要的问题是你没有将任何东西传递给名字功能。

答案 4 :(得分:1)

Dewsworld,只是学习如何调试javascript。它可以帮助您调查问题并自己找到解决方案。在某些浏览器中,调试器是内置的,在其他浏览器中,您必须下载它。但是这没关系。

一旦你开始逐步执​​行你的脚本,你就会看到它的所有变量都处于当前状态,并且它会比你说明你所遇到的问题的原因更清晰有效。

另外,阅读最后一版JavaScript The Definitive Guide。至少试着在书中找到解决方案和原因。因为在这里你只能得到一个简短的解决方案,通常情况下,没有深刻的未知的JavaScript引擎是如何工作的。