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

 

posted @ 2017-07-20 13:02  gq_orange  阅读(279)  评论(0编辑  收藏  举报