Javascript 命名函数表达式

Javascript 命名函数表达式,javascript,Javascript,我正在将命名函数表达式指定给对象的属性: var foo = {}; foo.bar = function bar(){ console.log('bar'); }; foo.bar()=>bar bar() 为什么我不能直接调用bar(),为什么没有定义它? 我知道我可以像var bar=foo.bar=function() 我已经在Chrome控制台和Node.JS中进行了测试。命名函数表达式不应该以这种方式工作。函数名仅在函数内部可见,在函数外部不可见 恰好有名称的函数实例

我正在将命名函数表达式指定给对象的属性:

var foo = {};

foo.bar = function bar(){
    console.log('bar');
};
  • foo.bar()
    =>bar
  • bar()
为什么我不能直接调用
bar()
,为什么没有定义它?

我知道我可以像
var bar=foo.bar=function()


我已经在Chrome控制台和Node.JS中进行了测试。

命名函数表达式不应该以这种方式工作。函数名仅在函数内部可见,在函数外部不可见

恰好有名称的函数实例化表达式与函数声明语句不同。这是语言中两个不同的语法(和语义)实体。

bar()
实际上意味着
window.bar()
,它没有在
window
名称空间中定义。相反,它是在
foo
命名空间中定义的。另请参见