来自:码农网 译文链接:http://www.codeceo.com/article/7-javascript-interview-qa.html 英文原文:7 JavaScript Interview Questions to Weed Out Imposters 翻译作者:码农网 – 小峰
-
创建JavaScript的对象的两种方法
var o1 = {}; var o2 = new Object;
-
如何创建数组
var a1 = []; var a2 = new Array;
-
什么是变量提升(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); }
-
全局变量有什么风险,以及如何保护代码不受干扰?
风险是:
污染命名空间,也就是说其他人或者自己可能创建相同名称的变量,然后覆盖了正在使用的变量。预防方法:
-
使用命名空间
var namespace = {}; namespace.myVariable = 'abc';
-
使用立即执行函数进行封装
(function(){ var a = 'abc'; })();
-
-
如果通过JavaScript对象中的成员变量迭代
for (var property in obj){ if(obj.hasOwnProperty(property)){ //do something here } }
-
什么是闭包(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
-
JavaScript的单元测试?