V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  qrobot  ›  全部回复第 1 页 / 共 20 页
回复总数  381
1  2  3  4  5  6  7  8  9  10 ... 20  
8 小时 4 分钟前
回复了 qrobot 创建的主题 分享创造 我做了一个浏览器插件, 可以用来静默打印 PDF, 网页
@lisongeee hash 算的有问题, 等待会我在更新一下网站
8 小时 6 分钟前
回复了 qrobot 创建的主题 分享创造 我做了一个浏览器插件, 可以用来静默打印 PDF, 网页
@lisongeee 非常感谢你的建议, 我这边已经调整了, 发布到 GitHub release 和蓝奏云了, 以前都是开发内网的, 没有太多经验, 要不现在在试试?
9 小时 35 分钟前
回复了 qrobot 创建的主题 分享创造 我做了一个浏览器插件, 可以用来静默打印 PDF, 网页
@ahu 我看了一下, 功能差不多, 我可以对标他的功能, 我抽空会对标他, 把他的功能全部实现, 非常感谢你
9 小时 47 分钟前
回复了 qrobot 创建的主题 分享创造 我做了一个浏览器插件, 可以用来静默打印 PDF, 网页
@janpun 里面都是使用的标准 Electron 的 API, 以及使用 C++ 做一些扩展, 所以我目前想着后期去购买一台 mac 电脑作为测试机, 目前资金有限......
9 小时 49 分钟前
回复了 qrobot 创建的主题 分享创造 我做了一个浏览器插件, 可以用来静默打印 PDF, 网页
@janpun 那当然会有 mac 版本的, 只不过目前我没有 mac 的电脑进行测试, 准备在有一定收入的时候, 就会构建 mac 版本, 预计支持 mac/linux/window
10 小时 34 分钟前
回复了 qrobot 创建的主题 分享创造 我做了一个浏览器插件, 可以用来静默打印 PDF, 网页
@xjngbla 还慢吗? 我研究一下怎么解决这个问题, 你这边是电信的还是联通的, 开了 vpn 了吗? 我好排查一下
10 小时 37 分钟前
回复了 qrobot 创建的主题 分享创造 我做了一个浏览器插件, 可以用来静默打印 PDF, 网页
@xjngbla 国内的服务器, 你试试断开 vpn 看看, 我考虑用户是国内的所以.......
@Plumbiu 以前我验证过 setTimeout 在部分情况下会直接被优化, 包括 setInterval 优化的策略根据浏览器的版本也有所区别. 和 w3c 规定不太一样
@Plumbiu 不说 XMLHttpRequest 这点时间不同执行顺序不同, 都不用考虑, 但是异步任务中 js 的异步队列中并不是按照 按照顺序执行的. 据我所知的在 edge 和 chome 上都有不同的差异, 在 firefox 上也有差异, 你不能信任 ecmascript 的异步队列.
@Plumbiu ecmascript 只是把任务交给浏览器去执行, 但是未必固定了任务是有序的, 和浏览器的实现有关, 虽然 w3c 固定了任务序列. 但是实际上执行上是有差异的. 例如 edge 的节能模式下 setTimeout 执行上就存在问题
@Plumbiu 看了一些 w3c 的规定, 任务队列中规定了执行顺序. 这一点我搞错了, 我一直以为是按照浏览器对任务队列的实现来说, 没有规定任务队列的顺序
@Plumbiu 就算不算 XMLHttpRequest, 连 setTimeout 都不保证依次执行
@Plumbiu 你怎么保证 XMLHttpRequest 执行依次调用 post 接口是依次执行的?
```
// 但是他又使用了一个闭包, 访问外部的环境, 但是外部的环境会根据返回的结果进行改变.
oldcontent = oldcontent.replace(ret['oldimgurl'], ret['newimgurl']);
```

这里就是 访问外部的变量, 但是外部的变量会根据返回的结果发生改变. 所以这里获得数据就会产生变化.不会按照逻辑走
@Plumbiu 异步执行, 完成的结果是具有不确定性的. 数据什么时候返回, 什么时候执行代码, 都是由 post 接口执行的时间来决定的. 本来其实也没什么问题, 但是他又使用了一个闭包, 访问外部的环境, 但是外部的环境会根据返回的结果进行改变.

var i = 0

// 五秒后 i = 1
// 六秒后 i = 2

那么 i = 1, i = 2

如果结果返回的时间变化了


// 五秒后 i = 2
// 六秒后 i = 1

那么 i = 2, i = 1

内部闭包改变了外部变量, 自然不会按照 for 循环的次数进行改变, 而是按照 callback 回调的时间进行改变.

我才说是 闭包 + 异步回调才会有这个问题.
console.log(1)
setTimeout(() => console.log(2))
console.log(3)

输出结果顺序是 1,3,2 为什么?

你在把这个问题回答上来, 基本上 ecmascript 就没啥大问题了, 其实这两个都是 ecmascript 的基本问题, 一个是异步,一个是闭包
@Plumbiu 那你现在理解吗? 为啥是闭包问题, 你看你的 29l 回答. 其实不是闭包问题, 而是闭包 + 异步回调导致的
@Plumbiu 答案我就不公布了, 有兴趣可以自己研究一下为什么
@qrobot 但是你 debugger 每次调试的时候都是正确的. 运行起来就不对了. 这个问题就有意思了.
1  2  3  4  5  6  7  8  9  10 ... 20  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1129 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 17ms · UTC 18:57 · PVG 02:57 · LAX 11:57 · JFK 14:57
Developed with CodeLauncher
♥ Do have faith in what you're doing.