JavaScript词法作用域经典练习题

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>

<script>
 //1 ====================================================
 var a;
 if ('a' in window) {
   var a = 10;
 }
 alert(a);  // 10
//  注:  in 是一个关键字  用于判断 '属性' in 对象  当前这个属性是否是对象的属性
//2 ====================================================
 var foo = 1;
 function bar() {
   if (!foo) {
     var foo = 10;
   }
   alert(foo); //  10

//      预解析阶段:
//       var foo;
//      代码执行阶段:
       if(!foo){
         foo = 10;
       }
       alert(foo);

 }
 bar();

 // 代码拆分:
//  预解析阶段:
 var foo;
 function bar(){}
 // 代码执行阶段:
 foo = 1;
 bar();
  
  //3 ============================================================
 var num = 123;
 function f1(num) {
//    var num = 456;
   console.log(num); // 456
 }
 function f2() {

   var num = 456;
   f1(num);//f1(456)
 }
 f2();
  
  //4 =====================================================================

 function fn(){
   var a = 1, b = 1, c = 1;
//    var a = 1;
//    var b = 1;
//    var c = 1;
 }
 fn();
 console.log(c); //1  e
 console.log(b); //1  e
 console.log(a); //e  e

 function fn1(){
   var a = b = c = 1;
   var a = 1;
   b = 1;
   c = 1;
 }
 fn1();
 console.log(c); // 1
 console.log(b); // 1
 console.log(a); // e
  
  //5 ================================================================
 var a ;
 function a(){
   console.log('呵呵')
   function a(){
     a = 4;
     console.log('哈哈')
   }
   a();
   console.log(a);  // 4
 }
 a();
 console.log(a); // 外面的a
  
 //6  ===================================================================
 var a = 1;
 function a(){
   a++;
 }
 console.log(a) //1
  
  // 7 =====================================================================
 var a = { x : 1 }
 var b = a;
 a.x = a = { n : 1};
 console.log(a.x); // undefined
 console.log(b.x); //  {n : 1}
  
</script>
</body>
</html>

 

posted @ 2018-05-17 23:05  前端邢晋宇  阅读(190)  评论(0编辑  收藏  举报