迅雷前端笔试题

1.代码

function bar(){
   return foo;
   foo = 10;
   function foo(){}
   var foo = 11;
}
console.log(typeof bar());
//函数声明的优先级高于变量
function fun1(){
  var n=167;
    nAdd=function(){n+=1;}
    function fun2(){
        return n;
    }
    return fun2;
}
var result = fun1();
 var a = result();
nAdd();
var b=result();
a,b的值
var foo = 1;
function bar(){
   foo=10;
   return;
   function foo(){}
}
bar();
console.log(foo);
//bar()

我们可以看到,函数声明被提升至作用域最顶端,然后被赋值为5,而外层的变量并没有被覆盖,经过预编译之后,上面代码的逻辑是这样的:

var foo = 1;
function bar(){
   var foo;
   foo = function foo() {};
   foo=10;
   return;   
}
bar();
console.log(foo);

所以,函数的优先权是最高的,它永远被提升至作用域最顶部,然后才是函数表达式和变量按顺序执行,这一点要牢记

var x=3;
 var foo={
   x:2,
   baz:{
    x:1,
    bar:function(){
     return this.x;    
    }
   }
}
var go = foo.baz.bar;
console.log(go());
console.log(foo.baz.bar());
//考察this的指向问题
x={};
function bar(){
  this.x=2;
  return x;//关键代码
}
var foo = new bar();
 console.log(foo.x);
 //return 如何更改了x的值
var obj1={x:5};
var obj2=obj1;
obj1.a=obj1={x:6};
console.log(obj1.a);
console.log(obj2.a);

Boolean(null)
Boolean(0’)
Boolean(undefined)
Boolean(0)

(function(){
var b=a=1;
})();
console.log(a);
console.log(b);

(function(){
var x=foo();
var foo = function foo=function(){
return “foobar”;
};
return x;
})();

function show(){};
delete show.length;
console.log(typeof show.length);

str = “this “+50.5

[3,2,1].reduce(Math.pow);
[].reduce(Math.pow);

var a = Array(3);
a[0]=8;
a.map(function(elem){return “2”});

var x=[0];
if([0]){
console.log(x==true);
}else{
console.log(“false”);

if(!!foo){}
if(typeof foo!==’undefined’){}
if(‘foo’ in window){}
foo &&foo();
foo为定义,哪种写法不会报错

new Promise((resolve,reject)=>{
resolve(1);
reject(2);
resolve(3);
return Promise.resolve(4);
}).then(console.log,console.log);

true == ‘true’
Boolean(‘false’);
!NaN
”==0

/[^\d]{2}/g.exec(“1234abcd”);

a[-1]=0

function Foo(){
bar = function(){console.log(1);}
return this;
}
Foo.bar = function(){console.log(2);}
Foo.prototype.bar=function(){console.log(3);}
var bar = function(){console.log(4);}
function bar(){console.log(5);};
Foo.bar();
bar();
Foo.bar();
bar();
Foo.bar();
bar();Foo.bar();
bar();
new Foo.bar();
new Foo().bar();

var obj={};
obj.log=console.log;
obj.log.call(console,this);

0 == NaN
0!=NaN

https://www.nowcoder.com/questionTerminal/46f3dcec50404c51804609bed5b13529?toCommentId=378284

js的内置对象
http://blog.csdn.net/ssisse/article/details/52335693

一些面试题:
http://www.educity.cn/develop/1120912.html
http://www.jb51.net/article/23127.htm

  1. 要动态改变层中内容可以使用的方法有(AB )
    a) innerHTML
    b) innerText
    c) 通过设置层的隐藏和显示来实现
    d) 通过设置层的样式属性的display属性
    http://www.educity.cn/develop/1120912.html

https://zhidao.baidu.com/question/358146458.html

https://wenku.baidu.com/view/b314932ccfc789eb172dc81f.html

捕获(IE8及以下版本不支持)

下列选项中关于JavaScript浏览器对象的说法错误的是c
a) history 对象记录了用户在意个浏览器中已经访问过的URL。
b) location 对象相当于IE浏览器中的地址栏,包含关于当前URL地址的信息
c) location 对象是history对象的父对象
d) location 对象是window对象的子对象

只有构造器才有prototype属性
构造器的prototype.constructor指向它自身(错)

https://www.nowcoder.com/questionTerminal/46f3dcec50404c51804609bed5b13529?toCommentId=378284

  1. 制作级联菜单功能时调用的是下拉列表框的(A )事件。 a)onChange b)onFocus c)selected d)onClick

http://www.cnblogs.com/cindy-hmy/p/5781969.html

TIME_WAIT的状态

http头部age

JavaScript 注释有几种

dp是css单位吗

js全局函数
http://www.cnblogs.com/lzhl/p/5238919.html

HTML 标签

块级元素只能在Body中
js可以通过修改数组的Length属性删除超出的变量
js中数组元素可以是任意值

HTTP2协议的新特性

下面关于IE、FF下面脚本的区别描述错误的是?(D)
innerText IE支持,FIREFOX不支持
document.createElement FIREFOX支持,IE不支持
setAttribute(‘class’,’styleClass’) FIREFOX支持,IE不支持
用setAttribute设置事件 FIREFOX不支持,IE支持

下面关于HTTP协议的说法正确的是:
HTTP是基于TCP协议之上的应用层协议
HTTP是一个普通用在浏览器和web服务器之间进行数据交换的流式二进制协议
HTTP协议的ETAG响应头主要用于信息的过期验证
HTTP1.0中的cache-control响应头主要用于控制信息在浏览器的缓存

https://www.nowcoder.com/questionTerminal/b70358c391d54b75a2139b66c13a4527?toCommentId=217695

以下哪个是并选择器

jQuery(三)4.从DOM中删除所有匹配的元素
http://blog.csdn.net/u014345282/article/details/49074361

hover facus active 顺序

http://www.cnblogs.com/jelly7723/p/5620929.html

使用jQuery,找到id位selector的select标签中有用data-target属性为isme的option的值?
https://segmentfault.com/q/1010000008058984/a-1020000008059134

dd 块级标签

jQuery - css() 方法

window.open(URL,name,features,replace)

http://www.w3school.com.cn/jsref/met_win_open.asp

大题:后缀
作者:莫回首
链接:https://www.nowcoder.com/discuss/44541
来源:牛客网

String.prototype.getSuffixList = function (suffix) {
    var result = "",
        strs = this.split(" "),
        LEN = strs.length,
        map = {},
        tmp = [],
        res;
    for (var i = LEN - 1; i >= 0; i--) {
        res = strs[i].indexOf(suffix);
        if (res != -1) {
            if (strs[i] in map) {
                map[strs[i]]++
            } else {
                map[strs[i]] = 1
            }
        }
    }
    var keys = Object.keys(map).sort(function (a, b) { return map[b] - map[a] //降序});
    for (var j = 0; j < keys.length; j++) {
        result += keys[j] + "=" + map[keys[j]] + ","
    }
    return result.substring(0, result.length - 1);//字符串
};

调试时:里面不能输出,否则0%
Object.keys(map)获取对象的所有键值,返回的是键值组成的数组
substring返回所截取的字符串,第二个参数指定位置字符不包含

多次bind重写

var self = null;
Function.prototype.bind = function() {
  if (self == null){
    self = this
  }
  //console.log(self);
  var context = [].shift.call(arguments),
    args = [].slice.call(arguments);
  return function() {
    return self.apply(context, [].concat.call(args, [].slice.call(arguments)));
  }
};
function foo() {
  return this.bar;
}
foo1 = foo.bind({bar:1});
foo2 = foo.bind({bar:2});
console.log(foo2());

实现一个map,参数为函数

Array.prototype.map = function(){
    console.log(arguments[0]);
    var fn = arguments[0];//函数
    var res = [];
    for(var i=0;i<this.length;i++){
        res.push(fn(this[i]));
    }
    return res;
}
var res = [1,2,3];
var r1 = res.map(function(item,index,array){
  return item*2;
})
console.log(r1);

注意:arguments为类数组对象,如果要取第一个参数为arguments[0],而不是arguments

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值