js运行机制
js是单线程的,单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。
任务又分为同步任务和异步任务
(1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。
(2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
(4)主线程不断重复上面的第三步。
vue开发环境和生产环境中跨域的配置
开发环境环境,在vue.config.js文件中配置代理
devServer: {
proxy: {
···
}
}
生产环境中,配置nginx
location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
}
如何快速定位内存溢出问题所在
this指向
- 函数是new出来的,this指向实例
- 函数通过call、apply、bind绑定过,this指向绑定的第一个参数
- 函数在某个上下文对象中调用(隐式绑定),this指向上下文对象
- 以上都不是,this指向全局对象
严格模式下的不同: - 独立函数调用: this 指向undefined
- 对象上的方法: this 永远指向该对象