我在.click
中创建了一个函数$('#BeforeFunction').click(function(){
//something is entered here then the function below is called
Hello();
});
$('#HitMe').click(function(){
//something here.....
function Hello(){
alert ('Hit button is pressed');
}
});
但调用时函数会导致错误,未定义消息Hello。
到底出了什么问题?
答案 0 :(得分:3)
ECMA- / Javascript具有功能范围(也称为词法范围)。这意味着,您在函数中定义的所有内容仅在此函数的范围/上下文中可见。因此,Hello
仅在HitMe
的事件处理函数的上下文中已知。
创建这样一个函数的最好方法可能不是破坏全局命名空间(将它放入window
对象),而是定义自己的命名空间/范围。
(function($) {
function hello() {
alert ('Hit button is pressed');
}
$('#BeforeFunction').click(function(){
//something is entered here then the function below is called
Hello();
});
$('#HitMe').click(function(){
Hello();
});
}(jQuery));
答案 1 :(得分:0)
您必须在function Hello()
范围之外定义click
。
答案 2 :(得分:0)
花括号定义范围并将Hello函数的定义限制为“HitMe”函数的范围。在“Hitme”函数之外定义Hello函数,最好在调用它之前。而你应该没事。
答案 3 :(得分:0)
每个点击事件处理程序都有自己的范围。你在其中创造的任何东西都无法从其他任何地方看到。您收到该错误的原因是第一个单击处理程序不知道Hello
是什么。为了解决这个问题,请在点击处理程序之前定义Hello函数
function Hello() {
alert ('Hit button is pressed');
}
$('#BeforeFunction').click(function(){
//something is entered here then the function below is called
Hello();
});
$('#HitMe').click(function(){
//something here.....
});
如果你想更好地理解JavaScript范围的概念,那么对Digital Web
有一个非常好的解释