1.预解释:不管条件是否成立都要进行预解释
if(!("a" in window)){
var a=1;
}
alert(a);//undefined
2.预解释:等号右边的不进行预解释(匿名函数之函数表达式)
var a=1,
b=function a(x){
x&& a(--x);
}
alert(a); // 1
3.预解释:变量重复了不再重新声明,会重新定义
function a(x){
return x*2;
}
var a;
alert(a);//function a(x){return x*2;}
4、预解释:等号右边的不进行预解释,变量重复了不再重新声明,要重新定义
var time=function(){
console.log(1)
}
function time(){
console.log(2)
}
time(); //1
5. this关键字问题
var name="222"
var a={
name:"111",
say:function(){
console.info(this.name);
}
}
var fun=a.say;
fun();//222
a.say();//111
var b={
name:"333",
say:function(fun){
fun();
}
}
b.say(a.say);//222
// a.say相当于把function(){console.info(this.name)}给了 b里的方法say做参数并且执行这个方法所以是window下的name
b.say=a.say;
b.say();//333
6、js delete删除对象属性,delete删除不了变量及原型链中的变量
(function(x){
delete x;
alert(x);
})(1+5) //6
7、setTimeout 是异步的
var a=6
setTimeout(function(){
alert(a);
var a=66;
},1000);
a=666;
alert(a); // 666 1s后是undefined
8、setTimeout是异步的等到循环执行完后才能执行函数里的代码,此时的i已经变成了4
for(var i=1;i<=3;i++){
setTimeout(function(){
console.log(i)
},0)
}// 同时输出3个 4
9、同一个引用地址
var a=new Object();
a.value=1;
b=a;
b.value=2;
alert(a.value) //2
10、考查预解释
function Foo(){
getName=function(){alert(1);}
return this;
}
Foo.getName=function(){alert(2)};
Foo.prototype.getName=function(){alert(3)}
var getName=function(){alert(4)}
function getName(){alert(5)}
Foo.getName();//2
getName();//4 带var提前声明、function声明加定义、已有的变量不再重复声明、
Foo().getName(); //1 先执行Foo函数,紧接着执行里边的getName 同时getName 也改变了全局的getName,因为它没有带var
getName(); //1 上边的代码执行后全局的getName函数被改了
(new Foo()).getName() //3
11、计算
console.log(10/4) //2.5
console.log((10/4).toFixed(2)) //2.50
console.log(10%4) //2 即整除后的余数
5、这道题是阿里的面试题自己计算下吧
function Test(){
this.verObj=undefined;
}
Test.prototype=function(){
var count=0;
function Version(){
this.version="1.1";
}
Version.prototype.setVersion=function(v){
this.version=v;
};
Version.prototype.getVersion=function(v){
return this.version;
};
return{
setCount:function(v){
count=v;
},
getCount:function(){
return count;
},
setVersion:function(v){
this.verObj=this.verObj||new Version();
this.verObj.setVersion(v);
},
getVersion:function(){
return this.verObj.getVersion();
}
}
}();
var test1=new Test();
var test2=new Test();
test1.setCount(100);
test2.setCount(200);
test1.setVersion("1.1");
test2.setVersion("1.2");
alert(test1.getCount());
alert(test2.getCount());
alert(test1.getVersion());
alert(test1.getVersion());
网友评论