zoukankan      html  css  js  c++  java
  • 关于JavaScript中没有块级作用域的理解

      引用《JavaScript权威指南》(第六版)中的举例

      代码段1:

    var scope="global";  
    function f(){   
        console.log(scope);  
        var  scope="local"  
        console.log(scope);  
    }  
    f();

      会输出什么?

      答案:undefined  local

      

      代码段2:

    var scope="global";  
    function f(){  
        var scope;  
        console.log(scope);  
        scope="local"  
        console.log(scope);  
    }  
    f();

      又会输出什么?

      答案:undefined  local

      代码段3:

    1. var scope="global";  
      function f(){  
          console.log(scope);  
      }  
      f();

      又会输出什么?

      答案:global

      通过以上三个例子,下面解释“JavaScript没有块级作用域,有函数作用域”这句话。

      在JavaScript中,由于函数作用域的特性,代码段1和代码段2是等价的,局部变量在整个函数体是中是有定义的,

    也就是说,代码段1在函数体内的局部变量scope覆盖了同名全局变量,并且只有在程序执行到var 语句的时候,局部变量scope才会被真正的

    赋值。因此,上述过程等价于:将函数内的变量声明“提前”至函数体顶部,同时变量初始化留在原来的位置:也就是代码段2。

      在具有块级作用域的编程语言中,在狭小的作用域里让变量声明和使用变量的代码尽可能靠近彼此,通常来讲,这是一个非常不错的编程

    习惯。由于JavaScript没有块级作用域,因此,一些程序员特意将变量声明放在函数体顶部,而不是将声明靠近放在使用变量之处。这种做法

    使得他们的源代码非常清晰地放映了知识的变量作用域。

  • 相关阅读:
    joins and includes
    学习库
    HTML5 画图--文字
    http://qiye.qianzhan.com/ 企业查询宝
    js 获取input选择的图片的信息
    input:file属性
    CSS 箭头
    颜色
    CSS 点击图片替换样式
    图片转base64
  • 原文地址:https://www.cnblogs.com/xiaodongaini/p/4779406.html
Copyright © 2011-2022 走看看