我有以下问题。我需要将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>
答案 0 :(得分:6)
您在hello
中定义了一个名为name()
的参数,但是您在没有参数的情况下调用name()
,因此hello
在name()
的上下文中未定义}。在您致电name()
时传递参数,或完全删除参数:
name = function (hello) {
hello();
}
name(hello);
或
name = function() {
hello();
}
name();
答案 1 :(得分:5)
在name
内,hello
会引用参数 hello
。当您在不传递任何参数的情况下调用函数时,hello
为undefined
。
将函数作为参数传递
name(hello);
或省略参数规范,以便hello
引用全局变量:
name = function() {
hello();
};
您应避免使用全局变量,以免它们与window
属性或其他库发生冲突。您可以将对象用作命名空间:
var myNameSpace = {};
myNameSpace.hello = function...
myNameSpace.name = function...
答案 2 :(得分:2)
您的代码存在两个问题。
variable
类中已存在的Window
名称。function
包含由hello
函数命名的参数。为此,您需要传递一个函数委托才能实现此目的。看看下面的完整代码:
<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引擎是如何工作的。