1.第一题
a();
functon a(){
	console.log('a');
}
b();
var b =function b(){
	console.log('b');
}
//请问,函数的执行结果是什么?

答案:a undefined
分析:这题考的是预编译,function声明的a提前声明,值为函数体,var关键字声明的b提前声明,值为undefined,所以在函数执行前调用时,a输出a,b输出undefined。

2、第二题
var a = 14;
fun1();
function fun1(){
	var b = 9;
	console.log(a);
	console.log(b);
	var a = '123';
}
//请问执行的结果是什么?

答案: undefined 9
分析:这题考的函数的预编译,有的人可能以为会是14 9,但其实在函数执行前,内部的用var关键字声明的变量a提前声明了,值为undefined,当遇到重名变量时,会优先使用自身拥有的变量,如果fun1内没有a变量,才会使用外部的变量。

3、第三题
var a = 3;
	function fun1 () {
		var c = b = a = 6;
		console.log(a);
		console.log(b);
		console.log(c);
	}
	fun1();
	console.log(a);
	console.log(b);
	console.log(c);
	//请问,代码执行的结果是什么?

答案: 6 6 6 6 6 报错
分析:这题考的变量的声明,在函数内用var关键字声明的变量是局部变量,不影响全局变量,没有用var关键字声明的变量是全局变量,因为函数内声明的a变量重名,所以函数内的声明的a变量覆盖了原先的a变量,所以a输出的都是6,因为b也没有用var声明,所以b也是全局变量,在函数外可以访问,而c是用var声明的,局部变量在函数外不能访问,所以报错c未定义。

4.第四题

题目:请列举JavaScript中函数声明的几种方式。
答案:1.函数声明
function funName(){}
2.函数表达式(函数字面量)
var f = new function (){}
3.函数构造法
var fun = Function()

5、第五题
var user = {
				count:1,
				getCount:function () {
					return this.count;
				}

			}
		console.log(user.getCount());
		var func = user.getCount;
		console.log(func());
		//请问代码的执行结果是什么?

答案: 1 undefined
分析:本题考点this指向,getCount被user调用,所以this指向的是user,返回1, 变量func接收的是一个函数体,所以当func执行的时候,this指向的是window,而window里没有count这个属性,所以返回的是undefined。

6、第六题
var name = 'the window';
			var obj = {
				name:'My Object',
				fun1:function  () {
					return function () {
						return this.name;
					}
				}
			}
			alert(obj.fun1()());
			//请问代码的执行结果是什么?

答案:the window
分析:这题也是考this指向,obj.fun1()返回的是一个函数体,这个函数体在对象外被调用,this指向的是window,而window里有name这个属性,所以输出the window。

7、第七题
var a = 'one';
			function func() {
				this.a = 'two';
			}
			var b = new func();
			console.log(a);
	//请问代码的执行结果是什么?

答案:one
分析:本题考点this指向,如果在一个函数前面那加上new关键字来调用,那么其实就是会自动创建一个链接到该函数的原型prototype的新对象,所以此时this绑定的是这个新对象,不再是全局,所以不会修改全局中的a。

8.第八题
var y = 1,x = y = typeof x;
	console.log(x);
	//请问代码的执行结果是什么?

答案:undefined
分析:使用连等赋值时,先看y = typeof x,x此时未赋值,因此是undefined,此时y被赋值为undefined,之后x=y,x被赋值为undefined。

9.第九题
var a,b;
	(function(){
		console.log(a);
		console.log(b);
		var a=b=3;
		console.log(a);
		console.log(b);
	})();
	console.log(a);
	console.log(b);

答案:undefined,undefined,3,3,undefined,3
分析:即执行函数中var a=b=3可分解为b=3,var a=b,由于b前没有var重新声明,因此是全局变量b被赋值3,之后函数内局部变量a被赋值,第一对console.log输出的a是局部变量a,b是全局变量b,两者都未定义,第三对console.log输出的是全局变量a,b。因此结果为:undefined,undefined,3,3,undefined,3。

10、第十题
var m= 1, j = k = 0; 
function add(n) { 
	return n = n+1; 
  } 
y = add(m); 
function add(n) { 
	return n = n + 3; 
} 
z = add(m);

答案:4 4
分析:本题考点预编译,js解释器会在所有代码执行前先查找所有函数,因此可以在函数声明前调用函数。并且后面定义的函数将覆盖前面同名的函数。