Javascript 前端开发人员访谈编码问题:a未定义,b已定义?
我是从你那里得到这个问题的。为什么下面的代码段会打印它打印的内容?我原本以为它会抛出一个引用错误“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
分配给一个预期定义的变量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的类型!=“未定义”)因为变量a=b=3代码>表示var a=window.b=3代码>
您正在从窗口访问b。因为b
没有用var
定义,所以它是global@epascarello是的,谢谢。如果我使用则使用strict代码>在这些语句之前,它将按照我最初的预期向我提供结果!如果没有=3
跟踪,它也会像我预期的那样抛出错误。真的!它(未声明变为全局)似乎只处于非严格模式?我甚至不太确定什么是“严格模式”,但我听说过!