JavaScriptNode.js浏览器

浏览器和 Node.js 有哪些不同?

比如这一段代码:

if (!global) {
    var global = window;
}
var obj = {
    say: function () {
        global.setTimeout(function () {
            console.log(this);
            console.log(this === global);
        }, 500)
    }
}

obj.say();

在浏览器和 Node 中的结果就是不一样的。浏览器里,最后会输出 true,而 Node 里却是 false——this 是一个 Timeout 对象(来自 timer.js)。

Colliot2/28/2018, 10:03:43 PM

为什么this会是这个Timeout对象?理论上应该指向global才对呀

sinoon3/6/2018, 5:03:00 AM

浏览器里setTimeoutthis永远指window,如果有其他需求的请用闭包实现?

但是node里显然没有window,于是node就把setTimeout里的this变成了timeout吗?

tigertang4/11/2018, 10:22:05 PM

浏览器里setTimeoutthis永远指window,如果有其他需求的请用闭包实现?

但是node里显然没有window,于是node就把setTimeout里的this变成了timeout吗?

by tigertang

但是有 global 呀。我认为合理的定义应该是 global,而不是这个 timeout 对象。Node 的实现可能不太妙。似乎是这个 setTimeout 里的闭包被传递到其他地方执行了,修改了 this

Colliot4/11/2018, 10:42:36 PM

Preview:

Cancel

Elsewhere

Colliot replied to 历史性的时刻,现在登陆用户刷新终于不会闪了!

不过这个带来了一个 bug,就是现在用户注销的时候,界面依然不会显示 ta 已经注销了。跟 Apollo Client 似乎有一定关系(详见Apollo Client 为什么 bug 这么多?)。

Colliot replied to 历史性的时刻,现在登陆用户刷新终于不会闪了!

似乎连续发了两次回复之后(而且都成功的时候),会报错(预期中的),但是不会正确加载回复。

Colliot replied to 历史性的时刻,现在登陆用户刷新终于不会闪了!

为什么会出现 API 变慢的情况?

Colliot replied to 历史性的时刻,现在登陆用户刷新终于不会闪了!

攻克技术难关。 其实并不是很难,原理上说。只是我还不是很明白,Angular 里哪些操作会在服务端执行,哪些不会。 在 service 里似乎显然异步的不会执行,在 redux 里似乎有的可以,有的不行,抑或是只能执行一层?或者是有超时机制? 这次我只能劫持 express 了……但是单独写一个中间件似乎也不行,我甚至只能在路由里面写,不加载就不触发 render……真是太暴力了。

Colliot replied to 虎哥这垃圾网站真的支持Kotlin的高亮吗?

看起来确实有一些问题

ice1000 replied to 我感觉这个网站已经开始走下坡路了

为什么虎哥在这个贴下发表无关内容。是因为这是H2O区吗。

NightyNight replied to 对 Angular 感到失望

你是虎哥末?为什么回复要10字以上?

Colliot replied to 我们应该有良好的编辑器,可以大大提高用户体验

另外应该用 AWS S3 来承载静态资源,从而真正迈入资源自有化阶段。

Colliot replied to 如何阅读 Chrome 的源码?

似乎找到了前述的调试 Chrome 相关的:从Chrome源码看浏览器如何构建DOM树,也找到了前述的 Node.js 相关的:node源码粗读(2):node编译过程详解及如何在本地进行源码修改和调试。真是双喜临门啊!