天天进修一点js

—- 有人会说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。

    原文作者:brian
    原文地址: https://segmentfault.com/a/1190000014024531
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞