欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前端面试题总结二(js)

程序员文章站 2022-06-09 17:07:20
...

2019的行情确实很糟糕,面试前一定要做好充分的准备!下面主要介绍一些常见面试题

1.有下面一段代码,输出index是3和4的li结果是什么

<ul>
    <li>这是第一个</li>
   <li>这是第二个</li>
   <li>这是第三个</li>
   <li>这是第四个</li>
   <li>这是第五个</li>
</ul>

var nodes=document.querySelectorAll('ul li')

for(let i=0,len=nodes.length;i<len;i++){
    nodes[i].addEventListener('click',function(){
        console.log('click='+i)
    })
}


结果:click=3,click=4

那如果我们把let改为var结果会是什么

for(var i=0,len=nodes.length;i<len;i++){
    nodes[i].addEventListener('click',function(){
        console.log('click='+i)
    })

}

结果:click=5,click=5
2.下面代码执行结果
 

console.log('1',typeof f,f)

function f(){
console.log(f)
}
var f="g"
console.log('2',typeof f,f)

结果:

1 function ƒ f(){
console.log(f)
}
2 string g

上面的代码的输出值是"function"而不是‘g’,这说明变量声明并没有覆盖掉函数声明

函数声明优先级要高于变量的声明,但是变量赋值以后,就会覆盖之前声明的函数

如果把var改为let结果:Identifier 'f' has already been declared

let不能重新声明,无论let声明的变量放在function之前还是之后结果一样都是报错

3.

function f(){
    console.log(a)
    let a=2 //报错 var的话undefined
}
f()

因为 const、let会在声明地方到块级顶部形成临时性死区,在这区间使用该变量都会被报错

4.

var name ='the windows'
var object={
    name:"my object",
    getName:function(){
      return function(){
        return this.name
      }
    }
}
console.log(object.getName()())

结果:the windows

5.

var num =1;//这里可以改为let,下面的var改为let会报错,应为let不可以重复定义
(function(){
  console.log(num)//undefined
  var num =2
  console.log(num)//2
})()
var num =1;//改成let也是一样的
(function(){
  console.log(num)//1
  num =2
  console.log(num)//2
})()

6

var a = {n:1};
var b = a;//赋值
a.o=a={n:2}
console.log(a)  //{n:2}
console.log(b)   //{n:1,o:{n:2}}

var a = {n:1};
var b = a;//赋值
a.o=b={n:2}
console.log(a)  //{n:1,o:{n:2}}
console.log(b)  //{n:2}

var a = {n:1};
var b = a;//赋值
a.o={n:2}
console.log(a)  //{n:1,o:{n:2}}
console.log(b)  //{n:1,o:{n:2}}


var a = {n:1};
var b = a;//赋值
b.o={n:2}
console.log(a)  //{n:1,o:{n:2}}
console.log(b)  //{n:1,o:{n:2}}

 

其实这类问题很容易理解,只需要记得变量只是对象的引用,变量并不是对象本身。

(1)取值的时候顺着变量找到对象;

(2)赋值的时候则改变变量的指向。

7

num =1;
var o={
 num:2,
 print:function(){
	this.num=3;
	(function(){
	console.log(this.num);//1
	})();
	console.log(this.num)//3
 }


}
o.print();

考察的this指代问题

8

var a=10;
function f(){
    var b= 2*a;
    var a=20;
    var c=a+1
    console.log(b);//NaN
    console.log(c);//21
}
var a=1//let一样的结果
function fun(){
console.log(a)
}
fun();//1
let b2=1
function fun(){
console.log(b2)
let b2=5
}
fun();//报错 如果都是var的话是undefined
function fun(){
    var a=1
}

fun();
console.log(a)//报错,因为a是局部变量,访问不到

注意,局部变量和全局变量问题

var a=1;
function fun(){
    console.log(a)//1
    a=2;
}

fun();
console.log(a)//2
var a=1;
function fun(){
    console.log(a)//undefined
    var a=2;
}

fun();
console.log(a)//1