var NAME = function NAME (){ }; - Function Name used twice
在JavaScript中,声明函数的一种标准方法如下:
1 2 3 | var add = function(a,b){ return a+b; }; |
但是,当我在语法右侧重复函数名时,我也不会得到任何错误。
1 2 3 | var add = function add(a,b){ return a+b; }; |
第二个案子怎么了?
在javascript中,
1 2 3 | function add(a,b){ return a+b; } |
它们总是需要一个名字,例如
1 2 3 | var add = function(a,b){ return a+b; }; |
甚至一个圆括号:
1 2 3 | (function(a,b){ return a+b; })(1,2); // 3 |
既然我们有了一些词汇量,你在第二个例子中得到了什么,再版。-
1 2 3 | var add = function add(a,b){ return a+b; }; |
-是一个函数表达式(即变量赋值到
现在,这个命名函数表达式的目的是什么?
它专门用于访问函数本身!根据MDN的文件,
If you want to refer to the current function inside the function body, you need to create a named function expression. This name is then local only to the function body (scope).
让我们重新命名你的
1 2 3 | var abc = function xyz(a,b){ return a+b; }; |
在上述情况下,
这个函数
1 2 3 | var add = function add(a,b){ return a+b; }; |
可以大致解释为
1 2 3 4 5 6 | // the scope of outer `add` is here var add = function (a, b) { var add = ...self... // something like that. the scope of this `add` is here return a + b; } |
在这两种情况下,您最终都拥有一个名为
但是在这个背景下,下面的行为是有趣的。
1 2 3 4 | var add = 1; function add() {}; add(); //<-- Error not a function |