js函数名后面加括号与不加括号的区别

今天看文档的时候,发现了一个问题:

var options = {
    target:        '#output1',   // target element(s) to be updated with server response
    beforeSubmit:  showRequest,  // pre-submit callback
    success:       showResponse  // post-submit callback

    // other available options:
    //url:       url         // override for form's 'action' attribute
    //type:      type        // 'get' or 'post', override for form's 'method' attribute
    //dataType:  null        // 'xml', 'script', or 'json' (expected server response type)
    //clearForm: true        // clear all form fields after successful submit
    //resetForm: true        // reset the form after successful submit
};

// pre-submit callback
function showRequest(formData, jqForm, options) {
    return true;
}

对象的方法为什么只有函数名,后面没有()?

回想一下平时的写法:

var options = {
    target:        '#output1',   // target element(s) to be updated with server response
    beforeSubmit:  function() {},
    success:       showResponse  // post-submit callback

    // other available options:
    //url:       url         // override for form's 'action' attribute
    //type:      type        // 'get' or 'post', override for form's 'method' attribute
    //dataType:  null        // 'xml', 'script', or 'json' (expected server response type)
    //clearForm: true        // clear all form fields after successful submit
    //resetForm: true        // reset the form after successful submit
};
采用匿名函数来定义一个对象的方法

再参照js对象方法的定义:1.对象的方法定义了一个函数,并作为对象的属性存储  2.对象的方法通过添加( )调用


显然,对象的方法定义了一个函数,但是并没有调用,如果加上( ),则函数会立即被调用


附:如下函数:

function test() {
    return "test";
}

分别打印

test: function test() {return "test";}  //函数表达式

test(): test  //函数执行结果

是不是很像?

var test = function() {
    return "test";
}

为什么可以直接使用函数名呢?参照js函数定义:

函数可以通过声明定义,也可以是一个表达式

函数声明:

function functionName(parameters) {
     执行的代码
}
函数表达式:

函数表达式存储在变量中,变量可作为一个函数使用,实际上就是一个匿名函数。

var x = function (a, b) {return a * b;}
var z = x(4, 3);

总结一下:“functionName”既是函数名,又是一个函数表达式。





你可能感兴趣的:(js函数名后面加括号与不加括号的区别)