zoukankan      html  css  js  c++  java
  • JScript中的隐式变量声明和var变量声明

      以前一直没注意到JScript中隐式变量声明和var显式变量声明的区别,虽然其间碰到一些问题,但没有引起太大的注意。直到今天写了几个函数,查了一下参考手册,觉得有必要改变一下传统隐式声明的习惯做法,以免带来不必要的麻烦。在手册中是这样描述“变量声明”的:

    变量在脚本中的第一次出现是在声明中。变量在第一次用到时就设置于内存中,便于后来在脚本中引用。使用变量之前先进行声明。可以使用 var 关键字来进行变量声明。

    var count;  // 单个声明。
    var count, amount, level;  // 用单个 var 关键字声明的多个声明。
    var count = 0, amount = 100;  // 一条语句中的变量声明和初始化。

    如果在 var 语句中没有初始化变量,变量自动取 JScript 值 undefined。尽管并不安全,但声明语句中忽略 var 关键字是合法的 JScript 语法。这时,JScript 解释器给予变量全局范围的可见度。当在过程级中声明一个变量时,它不能用于全局范围;这种情况下,变量声明必须var 关键字。

      这里对“过程级声明变量的范围”显然没有说明白,也许是中英文翻译的问题。让我们来看一个实例:

    function foo1(){
        
    for(i=0;i<10;i++) ;
    }

    function foo2(){
        alert(i);
    }

    foo1();
    foo2();
    猜猜这样会有什么输出?还是错误?
    事实是弹出一个对话框:10。但是如果先调用foo2()或把foo1()改成这样:
    function foo1(){
        
    var i;
        
    for(i=0;i<10;i++) ;
    }
    却是什么都没有出现,而是一个脚本错误的提示:“i is undefined”。

      所以我们可以看出,如果在函数中隐式声明了某个变量,那该变量将成为全局变量!像原foo1()函数中的变量i,循环后的值10将被保留,在foo2中就显示出来了。但是,如果在foo1()中用var显示声明了i,那它就是函数级的局部变量,在调用foo2()时自然无法找到i了。
      看来在写JScript时虽然系统允许隐式变量声明使用,但我们还是应该进行显式的变量声明,尤其是对习惯的循环变量等,以保证它的使用范围。
  • 相关阅读:
    Something I know about WebDynpro
    Details about support package implementation
    CRM Middleware Performance Topics
    Way to configure the logon navigaion layouts via Business Roles in CRM
    DOM 常用节点类型和方法
    第一届 xdef 会议日程
    去除百度音乐盒广告的chrome插件 持续更新
    从人人网抓取高校数据信息,包括,省份 高校 院系 (提供最终SQL文件下载)
    PHP 与 JSON
    解决HTTPS 发送请求走socket问题
  • 原文地址:https://www.cnblogs.com/wonderow/p/129392.html
Copyright © 2011-2022 走看看