天天看点

8.11牛客刷题总结

this的指向只有执行时才能确定,具体有以下几种情况:

1.new调用的时候指的是构造对象

2.apply和call调用的时候指的是我们指定的对象

3.对象调用的时候指向对象

4.默认指向全局对象window

8.11牛客刷题总结

上面的题目中,a能取到而b取不到,因为new构造一个函数以后f是一个对象,继承了Object而没有继承Function的属性,所以这里只能取到Object的属性

JavaScript的跨域解决方法:

1.jsonp请求:像script标签具有跨域属性,不受同源策略的限制,src和href,而且jsonp的兼容性较好,不受浏览器限制

2.document.domain:存载入文档的主机名,可以通过手动设置这个属性,实现在主域名相同子域名不相同的情况下的跨域

3.window.name:在window的生命周期内,窗口载入的所有页面都共享一个window.name,可以通过设置这个数据内容,来实现跨域

4.window.postMessage:用于对其他window对象发送信息

5.CORS:使用自定义的HTTP头部实现跨域,主要是服务器端实现了CORS接口

6.webSocket:websocketAPI实现跨域

7.Node或者Nignx实现反向代理:转发服务器的请求

JS的全局函数:

8.11牛客刷题总结
8.11牛客刷题总结

new的具体执行过程是:

1.创建一个空对象

2.把这个空对象的_proto_指向构造函数的prototype

3.把这个空对象赋值给this

4.执行函数内代码

这个题目中访问b.n的时候先访问b中是否有n这个属性,存在,返回9999。

访问c的时候,c中不存在n属性,这时候往原型链向上找,找到a.n,返回4400

8.11牛客刷题总结

结果应该是[,1,2,3],因为map()函数会自动跳过空位

typeof的运算结果:

typeof null => Object

typeof undefined => undefined

typeof 3 => number

typeof “abc” => string

typeof {} => object

typeof (function(){}) => function

typeof true => boolean

typeof void 0 => undefined

typeof Symbol(2) => symbol

8.11牛客刷题总结

该题输出define,因为加号的优先级大于三目运算,低于括号,所以无论括号里面什么,加上前面的字符串,结果都为True,所以最后输出define

js搜索变量的顺序是先顺着原型链在里面找,如果在内部找到了就无需再从外部找

变量提升的时候,只有变量声明提升,赋值不会提升

8.11牛客刷题总结

上面的题目答案是三个变量未被回收。

代码回收的规则:

1.全局变量不会被回收

2.局部变量执行完以后会被回收

3.如果被另一个作用域引用的话,不会被回收

8.11牛客刷题总结

答案为4,4,JS中不存在函数重载,所以后面出现的add函数会覆盖之前的add函数

8.11牛客刷题总结

这里要注意如果setTimeout中写checkState(),会被当做函数表达式,会立即执行。而使用checkState,不加圆括号,代表引用,不会立即执行。

继续阅读