zoukankan      html  css  js  c++  java
  • 一个js变量以及其作用域的源码示例

    今天遇到了一个问题,抽象出来的代码如下:

    var zoom=13;
    function setZoom(){
    zoom=14;
    }
    function displayZoom(){
    
    this.setZoom();
    alert(zoom);
    var zoom=1500;
    this.changeZoom();
    alert(zoom);
    }
    
    function changeZoom(){
    this.zoom=++zoom;
    }


    执行结果


    ………………………………………………

    …………………………



    ………………



    ………………


    很诧异  undefined 1500


    找找原因,是因为displayZoom()内部重新定义了zoom变量,去掉这个var

    var zoom=13;
    function setZoom(){
    zoom=14;
    }
    function displayZoom(){
    
    this.setZoom();
    alert(zoom);
    zoom=1500;
    this.changeZoom();
    alert(zoom);
    }
    
    function changeZoom(){
    this.zoom=++zoom;
    }

    执行结果是


    ………………………………


    ……………………





    ……………………



    14 1501

    不诧异了


    找了找解释:任何程序语言中变量的作用域都是一个很关键的细节。JS中变量的作用域相对与JAVA、C这类语言显得更自由,一个很大的特征就是JS变量没有块级作用域,函数中的变量在整个函数都中有效

    简单的说


    function displayZoom(){
    
    this.setZoom();
    alert(zoom);
    var zoom=1500;
    this.changeZoom();
    alert(zoom);
    }

    这段代码,执行时,等同于

    function displayZoom(){
    var zoom;
    this.setZoom();
    alert(zoom);
    zoom=1500;
    this.changeZoom();
    alert(zoom);
    }


    所以执行结果是:undefined 1500


    p.s,为了避免上面的这类问题,因此在函数开始位置集中做函数声明是一个极力推荐的做法。 


    dml@2013.8.22

  • 相关阅读:
    JS 实现的年月日三级联动
    【代码总结● Swing中的一些操作与设置】
    S7通信协议之你不知道的事儿
    .NetCore程序在Linux上面部署的实现
    什么是哈希表?
    什么是队列?
    什么是栈?
    什么是数组?
    什么是数据结构?
    什么是链表?
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3275792.html
Copyright © 2011-2022 走看看