js练习题
1 //1.预解释毫无节操-自执行函数 2 f=function(){return true}; 3 g=function(){return false}; 4 (function(){ 5 if(g()&&[]==![]){ //匿名函数中的g,即下面定义的方法g。 // []==![] 返回true 6 f=function(){return false;} 7 function g(){return true;} 8 } 9 })(); 10 alert(f()); //false 11 alert(g()); //false 12 13 14 15 // 2.自执行函数的预解释 16 (function f(){ 17 function f(){ return 1; } 18 alert (f()); //2 19 function f(){ return 2; } 20 })(); 21 22 23 24 // 3.作用域链 25 var a=12; 26 function show(){ 27 alert(a); 28 a=15; 29 } 30 show(); //12 31 alert(a); //15 32 33 34 35 // 4.预解释:变量声明早于代码运行 36 var a=12; 37 function show(){ 38 alert(a); 39 var a=15; 40 } 41 show(); //undefined 42 alert(a); //12 43 44 45 // 5.预解释:变量声明早于代码运行 46 var uname = 'jack' 47 function change() { 48 alert(uname) //undefined 49 var uname = '三峰' 50 alert(uname) //'三峰' 51 } 52 change() 53 54 55 // 6.在没有形参的情况下:函数声明早于变量声明 56 function change() { 57 alert(typeof fn) // function 58 function fn() { 59 alert('hello') 60 } 61 var fn 62 } 63 change(); 64 65 66 // 7.带var和不带var的区别; 67 function abc(){ 68 a=12; 69 alert(a); //12 70 } 71 function b(){ 72 alert(a) //12 73 } 74 abc(); 75 b(); 76 77 // 面试题 78 // 1.关于内存释放的面试题 79 function fn() { 80 var i = 10; 81 return function (n) { 82 console.log(n + (++i)); 83 } 84 } 85 var f = fn(); //首先把fn执行,然后把执行的结果赋值给f,函数执行只要看函数里面有没有return 86 f(15); //26 //引用,执行完不会立即释放 87 f(20); //32 88 fn()(15); //26 //每次执行完内存释放,作用域销毁 89 fn()(15); //26 90 fn()(20); //31 91 fn()(30); //41 92 f(30); //43 93 94 95 // 2.综合面试题 96 // 考察:this指向 97 var num = 10; 98 var obj = { 99 num: 20, 100 fn: (function (num) { 101 this.num *= 2; 102 num += 10; 103 return function () { 104 this.num *= 3; 105 num += 1; 106 console.log(num); 107 } 108 })(num) 109 }; 110 var fn = obj.fn; 111 fn(); //this->window 21 112 obj.fn(); //this->obj 22 113 console.log(window.num, obj.num); //60, 60 114 //https://zhidao.baidu.com/question/2270540468949188628.html 115 //http://www.imooc.com/qadetail/161604?t=227246 116 //https://www.zhihu.com/question/49789706 117 118 119 // 3.关于this和||的运用; 120 var name='三峰'; 121 var age=500; 122 name=(function(name,age){ 123 arguments[0]='三峰'; 124 age=age||this.age; 125 console.log(name,age); //三峰 500 126 })(name); 127 console.log(name,age) // undefined 500 128 129 130 // 4. 131 var i=3; 132 function fn(){ 133 i*=2; 134 return function(n){ 135 console.log(n*(++i)) 136 } 137 } 138 var f=fn(); 139 f(3) //21 140 fn()(3); //45 141 f(4); //64 142 fn()(3); //99