1.下面代码输出什么?
var a = {n:2}
var b = a;
a.n = a = {m:1};
console.log(a,b); //a:{m:1} b:{n:{m:1}}
2.下面代码输出什么?
var x = 1;
if(function fn(){}){
x += typeof fn
}
console.log(x) //1undefined
//考点:括号内函数声明外部访问不到
3.下面代码输出什么?
var fn = function test(){
console.log('代码执行了')
}
test() //ReferenceError: test is not defined
4.下面代码输出什么?
typeof undefined === typeof Undefined //true
//typeof检测到没有定义的Undefined变量 默认返回undefined
5.下面代码输出什么?
var str = typeof typeof {name:'heaven'};
if(str.length == 6){
str.prop = '这是一波字符串';
//实际执行 new String(str).prop = '这是一波字符串'; 执行后对象又被销毁所以str对象内还是不存在prop属性
}
console.log(str.prop); //undefined
//str = 'string' 字符串
//考点:包装类的特点即时销毁
6.下面代码输出什么?
var x = 10;
function a(){
y = function(){
x = 2;
}
console.log(this);
return function(){
var x = 3; //x是次函数this的x属性,而this已经指向window
console.log(this.x); //10
y();
console.log(this.x); //2
}.apply(this) //this指向window
}
a(); //10 2
console.log(y) //ƒ (){x = 2}
7.下面代码输出什么?
if(!('a' in window)){
var a = 1;
}
alert(a); //ReferenceError: a is not defined
8.下面代码输出什么?
var n = 10;
var obj ={
n : 5,
c : a()
};
function a(){
var n = 7;
var c = function(){
var n = 3;
console.log(n); //3
console.log(this.n); //5
}
return c;
}
obj.c(); //this指向obj
9.下面代码输出什么?
function fn(a,b,c){}
fn.fn = function(){
console.log(this.length); //this指向fn函数 函数的长度就是参数的个数
};
fn.fn(); //3
10.下面代码输出什么?
var arr = [1,3,5,7,9];
function fn(){
this.arr = [2,4,6,8,10];
arr.forEach( function(){ //自执行函数this指向window
console.log(this.arr);
})
};
new fn(); //[1,3,5,7,9]
11.下面代码输出什么?
function test(){
var n = 4399;
function add(){
n++;
console.log(n);
};
return {n,add} //只是让对象内的n值=外部var n的值 两个n并不是同一个n
}
var result1 = test();
var result2 = test();
result1.add(); //4400
result1.add(); //4401
console.log(result1.n); //4399 (result1.n并没用参与计算)
result2.add(); //4400 (函数每次执行都会生成对应的AO对象)
12.下面代码输出什么?
var out = 25,
inner = {
out:20,
func:function(){
var out = 30;
return this.out;
}
}
//考点:逗号运算符 (1,2) => 2 得到后面的数
console.log((inner.func, inner.func)()); //25 (括号内得到的是一个函数)(函数自执行this执行window)
console.log(inner.func()); //20 this指向inner
console.log((inner.func = inner.func)()); //25 =是赋值运算符得到的是一个单纯的函数,函数自执行this指向window
13.下面代码输出什么?
var a = 1;
var b = 2[a,b] = [b,a]
//b = 2[1,undefined] = [undefined, 1]
//b = undefined = [undefined, 1]
console.log(a); //1
console.log(b); //[ undefined , 1 ]
console.log(undefined); //undefined
//考点:逗号运算符 [1,2] => 2 得到后面的数
14.下面代码输出什么?
function fun(n,o){
console.log(o);
return{
fn: function(m){
return fun(m,n);
}
}
}
var a = fun(0); //undefined
a.fn(1); //0
a.fn(2); //0
a.fn(3); //0
a.fn(1).fn(2).fn(3); //0 1 2