JavaScript中全局变量两种输出方法的区别

根据预编译原理(已知),我们知道在执行script函数前会产生一个全局对象‘GO(Global Object)’也就是熟悉的window对象!

点击预编译了解关于预编译

在这个window对象里包括了

全部的全局变量

在这之中其中不要忘了隐式全局变量(即未声明即使用的变量)

这句话就可以理解成:一切的全局变量都属于window对象里的属性(属性名&属性值)

下面这个例子可以帮助解释一下

<script>
var a = 1;
function test() {

    b = 1;
}
</script>

即在这个<script>起始标签前,浏览器会自动第一次预编译,

生成

GO{

 a : undefined,

 b : undefined,  //隐式全局变量

 test : function test(){ b = 1;}

}

下面开始进入正题:

<script>
var a = 1;
function test() {

    b = 1;
}
//console.log(b) 第一种
//console.log(wondow.b)  第二种
</script>

如果以第一种去输出,则会报错,

第二种去输出,则会输出undefined,

注意:此时我没有运行函数,即没有对b赋值!! (也没有产生AO对象)

注意:此时我没有运行函数,即没有对b赋值!!  (也没有产生AO对象)

注意:此时我没有运行函数,即没有对b赋值!!  (也没有产生AO对象)

例子二:

<script>
var a;
console.log(b);
b = 1;
</script>

同上,这样也是会报错的。

总结:

window.b   和   b   的不同就是,第一个可以调用隐式全局变量,第二个则不可以;

但是,

有没有发现所有的输出,都是在未声明即赋值之前进行的,

如果赋值了,会出现什么样的结果呢?

例子一:
<script>
    var a = 1;
    function test() {

        b = 1;
    }
    test();
    //console.log(b) 第一种
    //console.log(wondow.b)  第二种
</script>
产生的结果是一样的,都是1;


例子二呢?:

<script>
b = 1;
console.log(b);
console.log(window.b);
</script>

同样,结果是一样的,

那么我们可以就知道,

如果隐式全局变量进行了赋值之后,那么window.  和  b 二者的差别则不存在!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值