zoukankan      html  css  js  c++  java
  • JavaScript声明全局变量三种方式的异同

    JavaScript中声明变量很简单var(关键字)+变量名(标识符)。

    方式1

    1
    2
    var test;
    var test = 5;

    需注意的是该句不能包含在function内,否则是局部变量。这是第一种方式声明全局变量。

    方式2

    1
    test = 5;

    没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。即使该语句是在一个function内,当该function被执行后test变成了全局变量。

    方式3

    1
    2
    window.test;
    window.test = 5;

    这种方式经常被用到一个匿名函数执行后将一些函数公开到全局。 如JQuery1.5中最末一句

    1
    window.jQuery = window.$ = jQuery;

    如果只是使用变量test,那么三种方式将没有什么区别。比如:alert(test) 都将显示5。但三种方式在某些情况下还是有区别的。分别按以上三种方式声明三个变量a1,a2,a3。

    1
    2
    3
    a1 = 11;
    var a2 = 22;
    window.a3 = 33;

    1,for in window

    1
    2
    3
    4
    5
    for(a in window){
        if(a=='a1'||a=='a2'||a=='a3'){
            alert(a)
        }
    }

    IE6/7/8/9:只弹出了a3,说明通过第一,二种方式声明的全局变量通过for in window时将获取不到。
    Firefox/Chrome/Safari/Opera :a1,a2,a3都弹出了,说明三种方式声明的全局变量,通过for in window时都能获取到。

    2,delete

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    try {
        alert(delete a1);
    }catch(e){alert('无法delete a1')}
     
    try{
        alert(delete a2);
    }catch(e){alert('无法delete a2')}
     
    try{
        alert(delete a3);
    }catch(e){alert('无法delete a3')}

      

    结果如下

    可以看到,
    1,delete a2所有浏览器都是false。即通过var声明的变量无法删除,所有浏览器表现一致。这在犀牛书上也有提到。
    2,通过window.a3方式声明的全局变量在IE6/7/8中均无法删除,IE9/Firefox/Chrome/Safari/Opera中却可以。


    虽然有以上两点不同,但当用in运算时,都返回true。

    1
    2
    3
    alert('a1' in window);//true
    alert('a2' in window);//true
    alert('a3' in window);//true

      

    用with打开对象window闭包时,所有浏览器也表现一致,如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    with(window){
        if(a1){
            alert(a1);//11
        }
        if(a2){
            alert(a2);//22
        }
        if(a3){
            alert(a3);//33
        }  
    }
  • 相关阅读:
    第38章 刷新令牌
    第37章 资源所有者密码验证(Resource Owner Password Validation)
    第36章 扩展授权
    第35章 秘密(secrets)
    第34章 授予类型
    node.js+ react + redux 环境搭建
    资源整理
    django form 组件插件
    django cookies与session
    django 初始命令
  • 原文地址:https://www.cnblogs.com/webpush/p/4968730.html
Copyright © 2011-2022 走看看