Javascript 将构造函数赋值给变量。-为什么';使用firefox控制台,这段代码不起作用吗

Javascript 将构造函数赋值给变量。-为什么';使用firefox控制台,这段代码不起作用吗,javascript,Javascript,通过将构造函数赋给变量,我无法使用函数本身实例化对象。为什么 这项工作: 功能车(){ this.j='j' } var car=新车(); 这不起作用: var io=功能车(){ this.j='j' } var car=新车(); 函数名是变量的名称 var io = function () { this.j = 'j' } var car = new io(); 其他 因为当你这样做的时候: var io = function Car() { ... } 对于所有浏览器,他们都

通过将构造函数赋给变量,我无法使用函数本身实例化对象。为什么

这项工作:

功能车(){
this.j='j'
}
var car=新车();
这不起作用:

var io=功能车(){
this.j='j'
}
var car=新车();

函数名是变量的名称

var io = function () {
  this.j = 'j'
}
var car = new io();
其他

因为当你这样做的时候:

var io = function Car() { ... }
对于所有浏览器,他们都会认为函数名是
io
,因为它是这样声明的,因此函数
Car()
仅在
io
的范围内,而其他函数(即8和更低版本)可能同时适用于
Car
io
,因此我的意思是创建两个独立的对象。在大多数情况下,使用它们没有问题。尽管由于IE的原因,最好是:

var io = function() {
    ...
}
var car = new io();


我个人也认为它们更具可读性和明显性

因为它就是这样工作的。您直接向函数引用声明
io
。因此,在功能体本身的范围之外没有
Car
功能

您可以访问函数体内部的
Car
,例如,可能是递归算法


Javascript允许您命名函数,因为您可能需要它(递归,duh),但只存在包含函数引用的
io

我得到“ReferenceError:Car未定义”这个问题需要更多的投票……命名函数表达式有一个明确定义的行为。的确,IE在NFE方面存在一些问题,但它们在所有其他浏览器中都能正常工作。@FelixKling我知道,我直观地解释了为什么有些浏览器在这种情况下既适用于
Car
又适用于
io
,尽管
io
是我们的参考。但是是的,我主要不推荐NFE,因为IE的问题。如果是这样的话,你介意更详细地描述一下这个问题吗?这并不是说该功能可以作为io或Car使用。在所有浏览器中,它都可以作为io使用,但IE8及以下版本也将创建一个功能车。你的描述听起来比实际情况更糟;)
var io = function() {
    ...
}
var car = new io();
function Car() {
    ...
}
var car = new Car();