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>