在jquery ready块中定义的函数和一个外部函数之间的区别是什么

时间:2013-03-18 13:29:11

标签: jquery function

我将一个函数注册到一个带有onclick属性的按钮,并在$()块中定义这个函数(我知道这是一个不好的做法,它只是一个例子),当我点击按钮时,会发生错误:未捕获的ReferenceError:未定义hello。这是我的代码:

<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript">
$(function(){
    function hello(){
        alert('hello');
    }
});
</script>
</head>
<body>
<input type="button" id="btn" value="click" onclick="hello()"/>
</body>

如果我从$()块中放入hello函数代码,它就可以了。我知道在解析DOM时执行$(),当我单击按钮时,DOM必须已经被解析,那么为什么它报告错误? 感谢。

2 个答案:

答案 0 :(得分:2)

你的代码假定hello是一个全局函数,它不是。

$(function(){
    function hello(){
        alert('hello');
    }
    $("#btn").click(hello);
});

答案 1 :(得分:1)

除了在$.ready块内的执行(未定义)函数保证在DOM准备好被访问/操作之后执行之外没有区别。

你的问题是范围界定;您已创建了一个本地函数,该函数在处理事件的全局范围内无法访问。