1、
var a = 100;
function fn() {
alert(a);
var a = 200;
alert(a);
}
fn();//undefined 200
alert(a);//100
var a;//没有求改window.a的值
alert(a);//100
var a = 300;
alert(a);//300
考点1:scope作用域,var定义的变量提前在器作用域的最顶端进行声明,函数中的第一处调用输出的是undefined.
2、
var obj1 = {name: 'obj1', fn: function() {
document.write(this.name);
}};
var obj2 = {name: 'obj2'};
var obj3 = {name: 'obj3'};
obj1.fn();//this指向obj1 àobj1
var newFn = obj1.fn;//newFn为一个普通方法
newFn();//window下的方法,this指向window,->””
newFn.call(obj2);//利用call使this指向obj2,->obj2
obj3.fn = newFn;
obj3.fn();//this指向obj3 –>obj3
考点:this的指向,this总是指向调用该方法的对象(普通变量和方法均是挂在window上的,在非严格模式下)。在非严格模式下this默认指向是window ,在window上如果调用没有定义的属性则会返回””;普通对象下引用没有过定义的对象则返回值是undefined,在引用的时候进行声明但没有初始化。引用普通未声明的变量则报错。
3、
var obj = {};
obj.log = console.log;
obj.log.call(console,this);
解析:相当于调用的是console.log(this),所以this——》为window
4、ajax中的事件有:
ajaxComplete(callback)
ajaxError(callback)
ajaxSend(callback)
ajaxStart(callback)
ajaxStop(callback)
ajaxSuccess(callback)
5、JS中的数据:
基本数据类型:Number,String,Boolean,Undefined,Null
复杂数据类型:Object,Array,Function,RegExp,Date,Error
全局数据类型:Math
6、void是一元运算符,void 作为运算符后面接的是表达式,void expression。而void(0)也是被当做void 0。如果直接void(),那么我觉得应该是把void当做函数使用了,但是此时void并没有定义。
7、
输出答案:4400 4401 4399 4400
两个不同对象的闭包是彼此独立的,不互相影响。
var result=test(); //执行test返回{n:4399,add:add};
var result2=test(); //同理
result.add(); //test构成闭包,add作用域链包含test活动对象,所以n++,会调用test活动对象的n累加,得到4400
result.add(); //同理
console.log(result.n); //这个n不是test活动对象里面的n
result2.add(); //同理,作用域链有test活动对象,但是这个跟result的不是同一个。
8、console.log('Value is ' + (val != '0') ? 'define' : 'undefine');
加号的优先级高于三目运算符,答案为:define
9、
var f=function g(){
return 23;
};
typeof g();
如果是typeof f,结果是function
如果是typeof f(),结果是number
如果是typeof g,结果是undefined.
如果是typeof g(),结果是