我的问题最容易用代码块及其下面的问题来解释。
但这里试图用英语解释我的问题:
我正在学习 JavaScript(我很懒,所以我使用了很多 jQuery...;))我遇到了一些我不太理解的东西,我不知道它叫什么,所以我不知道不知道我应该研究什么术语。
基本上我想知道什么时候需要使用function(){ ... }
(没有名字)和什么时候使用function function_name(){ ... }
(有名字),以及如何使用类似.click()
.post()
or的东西来执行一个函数setTimeout()
。
我知道几个 jQuery 函数,比如.click()
需要你放入一个要调用的函数。但问题是,你不能只说.click( function_name() )
(如果我正确解释了我的测试结果,这将在执行脚本后立即调用该函数)而是你必须做.click( function(){ ... })
或者你可以做.click( function function_name(){ ... })
. 我还发现您可以说.click( function_name )
,只要您事先定义var function_name = function function_name(){ ... }
,而函数名称是可选的,无论是否添加它都可以使用。
我用我能想到的所有可能的场景做了一个例子。我确实发现了哪些有效,哪些无效,现在我想找出为什么每个都有效而其他无效。
我希望理解这将有助于我更好地理解异步函数,例如.post()
or setTimeout()
。
<button id="one">Button 1</button>
<button id="two">Button 2</button>
<button id="three">Button 3</button>
<button id="four">Button 4</button>
<button id="five">Button 5</button>
<button id="six">Button 6</button>
<button id="seven">Button 7</button>
<button id="eight">Button 8</button>
<button id="nine">Button 9</button>
<script type="text/javascript">
function alert_three(){
alert('three');
}
var alert_four = function(){
alert('four');
}
function alert_five(){
alert('five');
}
var alert_five = alert_five();
//this will alert five right away, because we call to the function alert five, which does not return anything but creates an alert box.
var alert_six = function alert_six(){
alert('six');
}
$('#one').click( function(){
alert('one');
});
//this will work correctly.
$('#two').click( alert('two') );
//this will alert two right away, because...?
//it wont do anything else on click
$('#three').click( alert_three() );
//this will alert three right away, because...?
//it wont do anything else on click
$('#four').click( alert_four );
//this will work correctly.
$('#five').click( alert_five );
//this wont do anything else on click
$('#six').click( alert_six );
//this will work correctly.
$('#seven').click( function alert_seven(){
alert('seven');
});
//this will work correctly.
function alert_eight(){
return function(){
alert('eight');
}
}
$('#eight').click( alert_eight() );
//this will work correctly
function alert_nine(){
alert('nine');
}
$('#nine').click( alert_nine );
//this will not work
</script>
- 为什么此脚本在启动时会先发出五个警报,然后是两个警报,然后是三个警报?
- 为什么只有按钮 1、4、6 和 7 可以正常工作?
- 您如何描述工作按钮之间的区别?
- 您何时以及为什么会使用哪种变体?(意思是:什么时候给它一个名字,什么时候把函数写在一个变量中?)
同样的小提琴:http: //jsfiddle.net/ZfnaM/5/