• JavaScript变量的声明


    定义在函数体外的都属于全局变量,定义在函数体内的属于局部变量。这里的定义是指通过var声明的。

    JavaScript有隐含的全局概念,意味着你不声明的任何变量都会成为一个全局对象属性。例如:

    function test(){
    	myname = "huming";
    	alert(myname);
    }
    
    test();  // "huming"
    alert(myname);  //"huming"
    

     两个结果是一样的,说明myname是一个全局变量。

    那么,隐式全局变量和明确定义的全局变量有没有区别呢。。答案肯定是有的,看下面的例子:

    // 定义三个全局变量
    var global_test1 = 1;
    global_test2 = 2; // 反面教材
    (function () {
    	global_test3 = 3; // 反面教材
    }());
    
    // 试图删除
    delete global_test1; // false
    delete global_test2; // true
    delete global_test3; // true
    
    // 测试该删除
    alert(typeof global_test1); // "number"
    alert(typeof global_test2); // "undefined"
    alert(typeof global_test3); // "undefined"
    

     由上面的例子可以看出:在函数之外通过var定义的global_test1不能被删除,而没有经过var定义的global_test2和global_test3都被删除了(无论是否是在函数体内创建)。

    总结来说,在函数体外通过var声明的全局变量不能被删除,而隐式全局变量是可以删除的。

    这里要注意了:JavaScript有一种行为叫做“hoisting”(悬置/置顶解析/预解析)。

    我们通过一个例子来说明:

    var myname = "huming"; //声明全局变量
    function test() {
        alert(myname);
        var myname = "local_huming";
        alert(myname);
    }
    test();
    

     你猜两次alert的内容一致吗??显然不一致,一致还用说吗。。实际输出是:"undefined", "local_huming"。

    上面的例子等同于

    var myname = "huming"; //声明全局变量
    function test() {
      var myname;
      alert(maname);
      myname = "local_huming";   alert(myname); // "local" } test();

    第一次alert输出的myname并不是你以为的全局变量,而是和它在一个作用域(一个函数体)内的局部变量。虽然它还没有被声明,但被当作是声明了。这就是所谓的“hoisting”。

    这样应该就明白了吧。当你在函数体中使用了一个变量,又在之后重新声明的话,就可能产生错误。

    书写规范:

    function test() {
       var a = 1,
           b = 2,
           c = a + b,
           d = {},
           e,
           f;
       // function body...
    }
    

     好处在于:

    1、所有局部变量都定义在函数开始,方便查找;

    2、防止变量在定义之前使用的逻辑错误。

  • 相关阅读:
    for循环练习-----ATM取款
    面向对象基础项目----图书管理系统(数组)
    Java基础学习(二)-- 二维数组、String、StringBuffer以及类和对象之详解
    Java基础学习(一) -- Java环境搭建、数据类型、分支循环等控制结构、简单一维数组详解
    js 解决由于&#65279(bom文件格式)产生的空白行
    自适应网站设计对百度友好的关键:添加applicable-device标签(转)
    浏览器内核控制标签--meta
    HTML5的元素与结构标签
    <img>标签的补充
    HTML <head> 头部中的各类标签
  • 原文地址:https://www.cnblogs.com/humingx/p/4124818.html
Copyright © 2020-2023  润新知