前端面试题

7个去伪存真的JavaScript面试题

  1. 创建JavaScript的对象的两种方法

     var o1 = {};
     var o2 = new Object;
    1. 如何创建数组
     var a1 = [];
     var a2 = new Array;
    1. 什么是变量提升(Variable Hoisting)

    无论在一个范围内哪个位置声明的变量,JavaScript引擎都会将这个声明移到作用域范围的顶部。

    例子:

     var a = 0;
     function foo(){
         if(false){
             var a = 2;
         }
         console.log(a); //undefined
     }

    这段代码等于:

     var a = 0;
     function foo(){
         var a;
         if(false){
             a = 2;
         }
         console.log(a);
     }
    1. 全局变量有什么风险,以及如何保护代码不受干扰?

    风险是:污染命名空间,也就是说其他人或者自己可能创建相同名称的变量,然后覆盖了正在使用的变量。

    预防方法:

    1. 使用命名空间

       var namespace = {};
       namespace.myVariable = 'abc';
      1. 使用立即执行函数进行封装
       (function(){
           var a = 'abc';
       })();
  1. 如果通过JavaScript对象中的成员变量迭代

     for (var property in obj){
         if(obj.hasOwnProperty(property)){
         //do something here
         }
     }
    1. 什么是闭包(closure)?

    有权限访问另外一个函数作用域的变量的函数。闭包可以保持值的状态,比如说一些迭代值的当前值。

     function foo(){
         var result = [],i;
    
         for(i = 0; i < 3; i++){
             result[i] = function(){
                 return i;
             }
         }
    
         return result;
     }
    
     var result = foo();
    
     result[0](); //3
     result[1](); //3
     result[2](); //3
    1. JavaScript的单元测试?

来源

  1. http://www.codeceo.com/article/7-javascript-interview-qa.html

results matching ""

    No results matching ""