我正在试图理解这个函数表达式。
如果我创建一个包含函数声明的函数表达式 (p
),那么函数声明 a()
返回 undefined。
var p;
p = function a() { return 'Hello' }
typeof p; // returns 'function'
typeof a; // returns 'undefined'
有人可以解释一下为什么会这样吗?
如果我的术语使用不正确,请告诉我。
我正在试图理解这个函数表达式。
如果我创建一个包含函数声明的函数表达式 (p
),那么函数声明 a()
返回 undefined。
var p;
p = function a() { return 'Hello' }
typeof p; // returns 'function'
typeof a; // returns 'undefined'
有人可以解释一下为什么会这样吗?
如果我的术语使用不正确,请告诉我。
这不是一个函数声明,而是一个带有名称的函数表达式。该名称不会创建变量,但您可以在对象上看到它。
quentin@raston ~ $ node
> var p;
undefined
> p = function a() { return 'Hello' }
[Function: a]
> typeof p; // returns 'function'
'function'
> typeof a; // returns 'undefined'
'undefined'
> p
[Function: a]
> p.name
'a'
>
name
属性是非标准的。 - T.J. Crowder如果我创建一个看起来包含函数声明的函数表达式(p)
不是的。这是一个命名函数表达式,其中不包含函数声明。函数表达式的名称在函数作用域内作为标识符可用(指向函数本身),并且作为非标准的name
属性。
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/function
a
在函数内部是在范围内的,但在外部则不是。(顺便说一句,这不是我的负评。) - T.J. Crowder
function a() { return "Hello" } var p = a;
,或者不指定匿名函数的名称。 - Ian