执行此操作有什么区别.functionName vs this.functionName()?我对这两者之间没有明确的了解。
答案 0 :(得分:5)
this.functionName
读取对象functionName
的属性this
的值。
this.functionName()
读取对象functionName
的属性this
的值,尝试将其称为函数。如果this.functionName
的值不是函数,则会抛出错误。
将语句分解为
this.functionName()
\____callee_____/
\_CallExpression__/
"被叫"可以是任何表达式,但必须解析为函数对象。
Check out the AST如果你很好奇。
答案 1 :(得分:2)
评估时,第一个只是对函数的引用,在第二种情况下函数执行,表达式将被计算为函数的返回值。
答案 2 :(得分:1)
this.functionName返回函数本身,this.functionName()将执行函数并返回结果
function A() {
this.doSomething = function() {
return "A";
}
this.doOtherThing = function() {
console.log(this.doSomething);
console.log(this.doSomething());
}
}
var a = new A();
a.doOtherThing()
将以下内容打印到控制台:
function () {
return "A";
}
A
第一个是函数本身,第二个是函数的结果。您可能希望在不执行函数的情况下返回函数有很多原因,例如可以将它传递给另一个函数,以便在AJAX请求完成后调用。
答案 3 :(得分:1)
this.functionName
是对函数对象的引用。
如果要在调用函数之前检查函数是否存在,这可能很有用,例如
if (typeof(this.functionname) == 'function') {
this.functionname();
}
this.functionName()
实际上调用了函数。