—- 有人会说js很简单,很容易学,然则要想把这门言语用活,用通晓照样须要下很大的工夫的。那末我们就来看看接下来这几道js面试题吧。
题1
if(!(a in window)){
var a = 1;
}
console.log(a);
在控制台输出的效果是 undefined,实在就是考核js中变量提拔的知识点。
变量提拔示意的是变量的声明会被提前到函数顶部的处所,而赋值语句不会提拔。因而上面的题目现实是即是以下代码
//变量提拔
var a;
if(!(a in window)){
a = 1;
}
console.log(a)
变量a提拔到顶部,第一句就相当于window.a = undefined,所以在if语句中,推断前提始终是false,因而a=1不会实行,终究输出undefined。
题2
var a = 1,
b = function(){
x && a(--x);
}
console.log(a);
效果是1.
这道题考核的知识点是是签字函数表达式,申明函数表达式是不攒在变量提拔的,所以函数的定义不会被提前到顶部;而且申明函数表达式的名字在外部接见时会报错,只能函数内部接见到。我们能够看看下面的例子。
var b = function a () {}
b(); //挪用一般
a();//typeError:a is not a function
题3
function a(x){
return x*2;
}
var a ;
console.log(typeof a);
效果为 function
这道题目是的知识点是 函数声明和变量声明。 须要记着一点就是,在JavaScript中,函数声明的优先级高于变量声明的优先级。
因而在上述题中,由于优先级的题目,a会被定义为一个函数,背面定义的变量不会见效,因而typeof的时刻会返回function。
然则,须要注重的是,虽然函数声明会掩盖变量声明,但不会掩盖变量的赋值,我们将上面的代码该下,就会发明这个特性。
function a(x){
return x*2;
}
var a = 1;
console.log(typeof a);
上面的代码会返回number。由于赋值语句a= 1不会被掩盖,所以a会是一个数字,而不是函数,终究返回number。
题4
function b(x,y,a){
arguments[2] = 10;
console.log(a);
}
b(1,2,3);
终究输出的效果是10
然则,须要注重一种特殊情况,那就是严厉形式,在严厉形式下,arguments对象现实是函数参数的一个拷贝,现实指向的是差别的内存空间,对arguments值的转变并不会影响到函数参数值。
所以在严厉形式下输出的是3
function a(){
console.log(this);
}
a.call(null);
输出的效果是window对象。
这道题目考核的call要领,在js中,假如给call要领通报的第一个参数为null或许undefined,那末call要领中this会指向全局对象。
在浏览器环境中,全局对象为window;而在nodejs环境中全局对象为global,因而上述代码假如在浏览器下运转,会返回window。