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解释器会在所有代码执行前先查找所有函数,因此可以在函数声明前调用函数。并且后面定义的函数将覆盖前面同名的函数。