client.connect({onSuccess:this.onConnect.bind(this),
userName:uName,
password:uPassword,
onFailure:this.onFailure.bind(this)
});
onConnect() {
// Once a connection has been made, make a subscription and send a message.
console.log("onConnect");
}
onFailure(responseObject){
console.log("you have no access to the connnection!!!");
console.log(responseObject);
}
这会产生一个错误:"异常:ReferenceError:foo未定义"
但是" foo"被定义为。为什么会这样?我知道这是一个函数表达式" f()"用于访问此功能。但这不是一个匿名函数,我有一个这个函数的名字。为什么我无法使用其名称访问该功能?
答案 0 :(得分:6)
MDN - 函数表达式
语法
var myFunction = function [name]([param1[, param2[, ..., paramN]]]) {
statements
};
功能名称。可以省略,在这种情况下函数是匿名的。该名称仅在函数体的本地。
答案 1 :(得分:2)
您正在将函数表达式与函数声明混淆。
这声明了一个变量foo
并为其分配了一个匿名函数:
var foo = function() {};
这在当前范围内声明了一个函数bar
:
function bar() {};
这声明了一个变量baz
并为其指定了一个名为qux
的函数:
var baz = function qux() {};
请注意,在这种情况下,该范围内未声明该函数。只声明变量。恰好这个函数的name属性将被设置为qux
。
请参阅this question。
编辑:代码块 编辑:添加相关链接