前端面试题目总结2

  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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值