• 【面试必读】一不注意就做错的五道JavaScript题目


    如果不会,可以存在DW中运行试一下哦~

    1、这段代码会输出什么?

    1. function Container( properties ) {  
    2.     var objthis = this;  
    3.     for ( var i in properties ) {  
    4.         (function(){  
    5.                 var t = properties[i];  
    6.                 objthis[ "get" + i ] = function() {return t;};  
    7.                 objthis[ "set" + i ] = function(val) {t = val;};  
    8.         })();  
    9.     }  
    10. }  
    11.    
    12. var prop = {Name : "Jim", Age : 13};  
    13. var con = new Container(prop);  
    14. console.log(con.getName());  
    15.    
    16. con.setName("Lucy");  
    17. console.log(con.getName());  
    18. console.log(prop.Name);  

    2、输出什么 ?

    1. function a (x) {  
    2.     return x * 2;  
    3. }  
    4. var a;  
    5. console.log(a);  

    这段代码中,其实var a并没有任何影响,输出的是a(x)这样的方法签名。

    3、

    1. c = 999;  
    2. var c = 888;  
    3. console.log(this.c); //①  
    4. function b (x, y, c) {  
    5.     c = 6;  
    6.     arguments[2] = 10;  
    7.     console.log(c); //②  
    8.     console.log(this.c); //③  
    9.        
    10.     var c = 6;  
    11.     console.log(c); //④  
    12.     console.log(this.c); //⑤  
    13. }  
    14. b(1234);  

    这道题是比较变态的。

    • 第①处,this指的是window,在window下,c、this.c、var c在这里指的是同一个东西,看透这一点就好办了。打印的是888。
    • 第②处,方法体中,参数c和arguments[2]指的是同一个地址,所以把后者赋为10的时候,打印的是10,不是6。
    • 第③处,this指的是window,打印的是888。
    • 第④处,打印的是6。
    • 第⑤处,打印的是888。

    4、

    1. var start = new Date();  
    2. setTimeout(  
    3.     function(){  
    4.         var end = new Date();  
    5.         console.log(end - start);  
    6.     },  
    7.     1000  
    8. );  
    9. while(new Date() - start < 2000); 

    JavaScript因为是单线程工作的,因此虽然回调函数设置了1000毫秒后执行,事实上在1000毫秒的时候根本得不到执行,等待到while循环执行完毕后(因此已经是2000毫秒以后了),才去执行,因此输出应该是一个大于2000的数字。

     

    5、 

    1. (function(){  
    2.     console.log(typeof arguments);  
    3. })(); 

    很多人会说打印的是array,其实,arguments不是数组,打印的是object。

  • 相关阅读:
    Spring MVC全局异常后返回JSON异常数据
    spring mvc 异常统一处理方式
    Duplicate fragment name ERROR Jetty Maven Plugin
    Android中自己定义组件和它的属性
    stl非变易算法(二)
    unix more命令
    g711u与g729比較编码格式
    MD5的加密和解密(总结)
    js 定义类对象
    润乾报表实现可反复分组报表及改进
  • 原文地址:https://www.cnblogs.com/ranzige/p/five_javascript_questions.html
Copyright © 2020-2023  润新知