javascript中的函数 - 定义和调用它们,有或没有函数名称

oll*_*lli 3 javascript function function-calls

我的问题最容易解释为代码块和它下面的问题.

但这是试图用英语解释我的问题:

我正在学习JavaScript(而且我很懒,所以我使用了很多jQuery ...;))我遇到了一些我不太了解的东西,我不知道它叫什么,所以我不喜欢我知道应该研究什么术语.

基本上我想知道何时需要使用function(){ ... }(没有名称)以及何时使用function function_name(){ ... }(带有名称),以及如何使用.click() .post()或等执行函数setTimeout().

我知道一些jQuery函数,比如.click()需要你输入一个函数来调用.但问题是,你不能只说.click( function_name() )(如果我正确地解释了我的测试结果,这将在执行脚本时立即调用该函数)而不是你必须做.click( function(){ ... })或你可以做.click( function function_name(){ ... }).我还发现.click( function_name )只要事先定义就可以说,var function_name = function function_name(){ ... }而函数名是可选的,无论是否添加它都可以.

我举了一个例子,说明了我能想到的所有可能情况.我确实找到了什么工作,什么不工作,现在我想找出为什么每个人都在工作而其他人没有工作.

我希望理解这将有助于我更好地理解异步函数,如.post()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>
Run Code Online (Sandbox Code Playgroud)
  • 为什么这个脚本会在启动时提前五个,然后两个,然后三个提醒?
  • 为什么只有按钮1,4,6和7才能正常工作?
  • 您如何描述工作按钮之间的差异?
  • 您何时以及为何使用哪种变体?(意思是:何时给它起一个名字,何时在变量中写入函数?)

同样的小提琴:http: //jsfiddle.net/ZfnaM/5/

Que*_*tin 5

基本上我想知道何时需要使用function(){ ... }(没有名称)以及何时使用功能function_name(){ ... }(带名称)

从来没有必要使用它们.使用其中一种或另一种有时更方便.

以及如何使用.click().post()或setTimeout()等函数执行函数.

如果您正在使用接受回调的函数,那么您只需将要用作回调的函数传递给任何其他变量或文字.

如果你想编写一个使用回调的函数,那么它基本上归结为:

function accepts_callback(callback) {
    callback();
}
function a_callback() {
    alert("This is a callback");
}
accepts_callback(a_callback);
Run Code Online (Sandbox Code Playgroud)

你不能只说 .click( function_name() )

放置()一个函数后会调用它.不要包括它们,因为你可以通过它.

为什么这个脚本会提前五个警告,

你做的第一件事,然后声明函数,是进行函数调用: var alert_five = alert_five();

然后两个

$('#two').click( alert('two') ); //this will alert two right away, because...?

你在alert这里打电话

//它在点击时不会做任何其他事情

返回值alert将永远是undefined,这不是一个函数

启动时有三个?

$('#three').click( alert_three() ); //这会马上警告三个,因为......?

您正在alert_three立即调用该函数.

//它在点击时不会做任何其他事情

alert_three没有return语句,所以它返回undefined,这不是一个函数

为什么只有按钮1,4,6和7才能正常工作?

这是你给函数作为参数的唯一的click().