JavaScript随手记 – 作用域

js 变量的作用域

  • JavaScript 中没有块作用域,只用函数作用域
    <script type="text/javascript">
      function rainman(){
        // rainman函数体内存在三个局部变量 i j k
        var i = 0;
        if ( 1 ) {
            var j = 0;
            for(var k = 0; k < 3; k++) {
                alert( k );    //分别弹出 0 1 2
            }
            alert( k );        //弹出3
        }
        alert( j );            //弹出0
    }
    </script>
    
  • let 和 const 关键字支持在块级声明中创建使用局部作用域

    其中 let 创建的变量不可重复声明,const 创建的变量其值不可修改

    if (true) {
      // this 'if' conditional block doesn't create a scope
    
      // name is in the global scope because of the 'var' keyword
      var name = 'Hammad';
      // likes is in the local scope because of the 'let' keyword
      let likes = 'Coding';
      // skills is in the local scope because of the 'const' keyword
      const skills = 'JavaScript and PHP';
    }
    
    console.log(name); // logs 'Hammad'
    console.log(likes); // Uncaught ReferenceError: likes is not defined
    console.log(skills); // Uncaught ReferenceError: skills is not defined
    
  • 未使用var、let、const关键字声明的变量都是全局变量
    <script type="text/javascript">
      function rain(){
        x = 100;    //声明了全局变量x并进行赋值
    }
    rain();
    alert( x );    //会弹出100
    </script>
    
  • 全局变量都是window对象的属性
    <script type="text/javascript">
      var x = 100 ;
    alert( window.x );//弹出100
    alert(x);
    </script>
    
  • JavaScript 会率先执行所有的变量声明语句,注意下面代码的理解
    <script type="text/javascript">
      var x = 1;
      function rain(){
          alert( x );        //弹出 'undefined',而不是1
          var x = 'rain-man';
          alert( x );        //弹出 'rain-man'
      }
      rain();
    </script> 
    

发表评论

电子邮件地址不会被公开。 必填项已用*标注