Javascript 前端开发人员访谈编码问题:a未定义,b已定义?

Javascript 前端开发人员访谈编码问题:a未定义,b已定义?,javascript,Javascript,我是从你那里得到这个问题的。为什么下面的代码段会打印它打印的内容?我原本以为它会抛出一个引用错误“b未定义”(因为它看起来像“我们将要将一个未定义的变量b分配给一个预期定义的变量a),但后来它变成了“b已定义,a未定义,并且没有错误”"? 什么是var a=b=3是在javascript中调用的吗 (函数(){ 变量a=b=3; })(); log(“a已定义?”+(a的类型!==“未定义”); log(“b已定义?”+(b的类型!=“未定义”)变量var仅适用于a而不适用于b。因此,由于b不

我是从你那里得到这个问题的。为什么下面的代码段会打印它打印的内容?我原本以为它会抛出一个引用错误“b未定义”(因为它看起来像“我们将要将一个未定义的变量
b
分配给一个预期定义的变量
a
),但后来它变成了“b已定义,a未定义,并且没有错误”"? 什么是
var a=b=3是在javascript中调用的吗

(函数(){
变量a=b=3;
})();
log(“a已定义?”+(a的类型!==“未定义”);

log(“b已定义?”+(b的类型!=“未定义”)变量
var
仅适用于
a
而不适用于
b
。因此,由于
b
不是用
var
定义的,而是分配了一个值,因此它成为全局的

如果重新编写函数的工作方式,可以清楚地看到
b
没有
var

(函数(){
var a;
b=3;
a=b;
})();
log(“a已定义?”+(a的类型!==“未定义”);

log(“b已定义?”+(b的类型!=“未定义”)表示
var a=window.b=3

您正在从窗口访问b。

因为
b
没有用
var
定义,所以它是global@epascarello是的,谢谢。如果我使用
则使用strict在这些语句之前,它将按照我最初的预期向我提供结果!如果没有
=3
跟踪,它也会像我预期的那样抛出错误。真的!它(未声明变为全局)似乎只处于非严格模式?我甚至不太确定什么是“严格模式”,但我听说过!