一旦将javascript函数分配给不同的var,为什么不能通过其原始名称访问javascript函数?

时间:2017-03-24 06:54:34

标签: javascript function

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()"用于访问此功能。但这不是一个匿名函数,我有一个这个函数的名字。为什么我无法使用其名称访问该功能?

2 个答案:

答案 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

编辑:代码块 编辑:添加相关链接