前言

这个问题可能会让一些小白同学产生困惑,认为它们都表示同一个意思,但它们有着本质上的区别

 

undefined

表示声明了一个变量,但还未赋值,比如 var a;

function a() {
    var a;
    console.log(a);
}
a();

如果是下面这样,a依然会打印出undefined

function a() {
    console.log(a);
    var a = 1;
}
a();

因为变量提升,上面代码在编译后,实际是下面这样

function a() {
  var a; console.log(a); a = 1; } a();

 

 x is not defined

使用了未定义,也就是没有声明的变量,如下所示,在全局作用域都没有声明b变量 
function a() {
    var a = 1;
}
console.log(b);
a();

 
如果在函数内部未使用var或let进行变量声明,变量会自动变为全局变量
function a() {
    a = 1;
}
a();
console.log(a);

上面代码打印a为1,因为a已变为全局变量,实际代码如下

var a;
function a()
{ a = 1; } a(); console.log(a);

 

有需要的朋友可以领取支付宝到店红包,能省一点是一点