Javascript IE和Firefox下相同的脚本,不同的输出,为什么?

Javascript IE和Firefox下相同的脚本,不同的输出,为什么?,javascript,Javascript,在某个地方找到了这段代码: function Name1(name){ this.name = name; } var name = new Name1("11"); document.write(name.name); Output: IE11 - "11" Firefox43 - "undefined" 只是想知道为什么会这样,以及正确的输出应该是什么?您显然是在全局范围内运行这个。用var声明的全局变量成为全局对象的属性。1在浏览器上,该对象是窗口窗口已经有一个名为名称的属性:

在某个地方找到了这段代码:

function Name1(name){
    this.name = name;
}
var name = new Name1("11");
document.write(name.name);

Output:
IE11 - "11"
Firefox43 - "undefined"

只是想知道为什么会这样,以及正确的输出应该是什么?

您显然是在全局范围内运行这个。用
var
声明的全局变量成为全局对象的属性。1在浏览器上,该对象是
窗口
<代码>窗口已经有一个名为
名称
的属性:它是窗口的名称(如果有)。在Firefox上,它只能是一个字符串,因此将忽略为其分配对象;IE显然更为宽松(可以说,在HTML5规范中是错误的;)。因此,
name=newname1(“11”)
最终成为Firefox上的禁忌,而
name.name
(读取字符串的
name
属性)会产生
未定义的

如果更改变量的名称,则在两个浏览器上获得相同的输出:

函数名称1(名称){
this.name=名称;
}
var x=新名称1(“11”);

console.log(x.name)您显然是在全局范围内运行此操作。用
var
声明的全局变量成为全局对象的属性。1在浏览器上,该对象是
窗口
<代码>窗口
已经有一个名为
名称
的属性:它是窗口的名称(如果有)。在Firefox上,它只能是一个字符串,因此将忽略为其分配对象;IE显然更为宽松(可以说,在HTML5规范中是错误的;)。因此,
name=newname1(“11”)
最终成为Firefox上的禁忌,而
name.name
(读取字符串的
name
属性)会产生
未定义的

如果更改变量的名称,则在两个浏览器上获得相同的输出:

函数名称1(名称){
this.name=名称;
}
var x=新名称1(“11”);

console.log(x.name)将此记为不在全局空间运行代码和始终使用
var
(或
let
/
const
)的原因。将此记为不在全局空间运行代码和始终使用
var
(或
let
/
const
)的原因。