web前端笔试题——JS

来源:互联网 发布:ubuntu 16.04安装lamp 编辑:程序博客网 时间:2024/05/24 05:59

1.what is the value of foo?

var foo =  10 + '20';   // '1020'

2.How would you make this work?

add(2,5); // 7

add(2)(5); // 7

第一个就没必要解释了,主要是第二个
        function add(x){

var sum = x;

var subFun = function (y){

sum += y;

return subFun;//这里之所以要返回subFun是为了更多的链式操作 比如add(2)(5)(3)...

}

return subFun;  //执行add(2)将2存储在sum里面并且返回subFun方法供(5)执行。

}

3.What value is returned from the following statement?

'i'm a lasagna hog'.split("").reverse().join("");

//注:.split("")里面没有空格 如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符(包括空格)之间都会被分割。所以结果是"goh angasal a m'i"

'i'm a lasagna hog'.split(" ").reverse().join(" "); //结果则是'hog lasagna a i'm'

4.var a = [] 和 var a = new Array()性能的区别;(其实就没有区别)   点击打开链接

5.what is the outcome of the tow alerts below?

var foo = "Hello";

(function(){

var bar  =" World";

alert(foo+bar); // Hello World

})();

alert(foo + bar); // 报错 bar undefined

6.What is the value of foo.x?

var foo = {n:1};

var bar = foo;

foo.x = foo = {n:2};
/**

*个人总结这个题主要考了三个重点,一是引用赋值,二是js计算符的优先级,三是赋值表达式结合性

*var foo = {n:1};var bar = foo;所以这两行的结果是对象foo和bar存的都是同一个对象{n:1}的地址,关键在于第三行。由JS运算符的优先级可以看出对象的属性访问

*符'.'在这一行的优先级最高,所以foo.x最先计算,存下的是对{n:1}这个对象的X属性的引用。而由于JS赋值表达式是右结合,所以第三行就相当于是

*foo.x = ( foo = {n:2} ),也就是先进行foo = {n:2}这个赋值,所以此时的foo已经指向了{n:2}这个对象,再执行foo.x = foo,也就相当于给{n:1}这个对象的X属性赋值

*为{n:2},整个过程bar都指向的{n:1}这个对象,所以bar最终结果是{n:1,X:{n:2}},而foo为{n:2}。

**/

7.What dose the following code print?

1️⃣

console.log('one');

setTimeout(function()

{

console.log('two');

},0);

console.log('three'); // one three two

2️⃣

function foo(){

console.log('first');

setTimeout(function(){

console.log('second');

},5);

}

for(var i = 0; i < 1000; i++){

foo();

}

// 结果是全部打印first之后再打印的second。

//其实就是Js的单线程