1.创建JS对象的两种方法?
var o1 = {};
var o2 = new object;
2.如何创建数组?
var a1 = [];
var a2 = new Array;
3.什么是变量提升?
无论在哪一个范围内,哪个位置声明的变量,JS引擎都会将这个声明移 动到作用域范围的顶部.
例子:
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);
}
4.全局变量有什么风险,以及如何保护代码不受干扰?
风险是:污染命名空间
,也就是说其他人或者自己可能创建相同名称的变量,然后覆盖了正在使用的变量.
预防方法:
i.使用命名空间
var namespace = {};
namespace.myVariable = 'abc';
ii.使用立即执行函数进行封装
(function(){
var a = 'abc';
})();
5.如何通过JS对象中的成员变量迭代
for(var property in obj){
if(obj.hasOwnProperty(property)){
//do something here
}
}
6.什么是闭包?
闭包是有权限访问另外一个函数作用域变量的函数.闭包可以保持值的状态
,比如说一些迭代值的当前值.
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