您的位置:首页 > Web前端 > JavaScript

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

2018-01-22 17:41 246 查看
今天看文档的时候,发现了一个问题:

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”既是函数名,又是一个函数表达式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: