前端面试题目总结2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hreticent/article/details/86773140
  1.  请问 a 的结果是什么? 

作用域 变量声明 变量提升

if(! "a" in window){
    var a = 1;
}
alert(a);

//javascript只有函数作用域, 没有块作用域,所以在if 里面的赋值语句 

//var a = 1;等价于下面的代码


var a ; //这个声明语句会被提升到代码顶部。  

if(! "a" in window){
   a = 1;
}
alert(a);
if(! 'a' in window)
//因为! 比 in 的优先级高,所以这个判断式等价 (!'a') in window, 结果为false,
//所以不会执行赋值语句
//alert(a) 返回 undefined

2. 

假设val已经声明,可定义为任何值。则下面js代码有可能输出的结果为:

console.log('Value is ' + (val != '0') ? 'define' : 'undefine');

a. Value is define    b.  Value is undefine   c. define  d.  undefine
e. Value is define 或者 Value is undefine   e. define 或者 undefine

答案C 加号优先级高于 三目运算。低于括号。 所以括号中无论真假 加上前边的字符串都为 TRUE 三目运算为TRUE是 输出 define

3. 上面代码执行后, arr 的值是:()
var arr=[{a:1},{}];
arr.forEach(function(item,idx){
    item.b=idx;
});

console.log(arr)//[{a:1,b:0},{b:1}]

forEach()方法是对数组中的每一项运行给定函数。

回调函数的参数item为数组当前项,idx为当前索引。

本题就是把数组每一项添加属性b,并且属性b的值为当前项的数组索引值。

另外,forEach()方法没有返回值,所以不能将 arr.foreach()像其他数组迭代方法那样赋值给某一个变量。

首先,forEach 没有返回值

第一次,item 值为 {a:1}

第一次运行后 item 值为 {a:1,b:0}

第二次,item 值为 {}

第二次运行后 item 值为 {b:1}

item的变化会影响 arr ,因为对象的浅拷贝

4. 执行以下程序段后,x的值是( )。

var x=0;
switch(++x)
{
    case 0: ++x;
    case 1: ++x;
    case 2: ++x;
}

 switch中,对x+1,此时x为1,然后进入case 1 中,又执行++x,此时x变为2;由于case 1中没有break,然后继续执行 case 2,执行++x,所以x变成3

i++ 与 ++i 的主要区别有两个:

  • i++ 返回原来的值,++i 返回加1后的值。
  • i++ 不能作为左值,而++i 可以。

5. 下面这个JS程序的输出是什么:


function Foo() {
    var i = 0;
    return function() {
        console.log(i++);
    }
}
 
var f1 = Foo(),
    f2 = Foo();
f1();
f1();
f2();

 分别输出0,1,0;这里涉及到的js知识点也不是很深,主要就是++运算符的理解和闭包的理解。

首先Foo函数返回的也是一个函数,即function( ){ console.log(i++),而这个函数的i引用的是外层函数的i,形成闭包,

使得i的初始值为0。
var f1 = Foo( ),f2 = Foo( )这一句,前半句var f1 = Foo( )可以看做是var f1 = function( ){ console.log(i++)}。

那么第一次执行f1的时候,自然是输出0,这里主要理解的是++运算符的使用,放在数字后表示后增,即先执行再+1,

这里就是先执行console.log(i)之后i再加1,所以f1执行第二次的时候i已经变成了1,自然就输出1了。
后半句f2 = Foo() 可以看做是f2 = function( ){console.log(i++)},这没什么可说的,直接输出i的初始值0.

猜你喜欢

转载自blog.csdn.net/Hreticent/article/details/86773140