V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  yezheyu  ›  全部回复第 2 页 / 共 4 页
回复总数  73
1  2  3  4  
2023-01-11 12:35:01 +08:00
回复了 yezheyu 创建的主题 程序员 关于异步任务的一点疑问,有没有老哥帮忙解答下
@cyndihuifei @peterlitszo

个人理解,可能有错,欢迎指出



js 之所以是单线程,主要为了避免资源竞争问题。

但实际上 js 不可能是单线程,就比如 xhr 图片加载,xhr 在下载时没有阻塞主线程,那图片的下载必定不是在主线程执行,那必定有一个线程帮你执行下载工作,就是网络线程。

所以我认为 js 单线程是指你在 js 代码中无法像其它语言那样使用多线程模块创建一个线程执行一个代码块。只能使用预留的 API 调用现有的线程,如浏览器的 xhr Web Api ,node 的 fs 模块

那像 xhr 中在网络线程中要渲染图片,涉及到操作 dom ,就会出现资源竞争问题,所以必须放到任务队列中让主线程来进行



那你在代码中的耗时任务该怎么办呢? js 又没有多线程让你开辟一个线程去处理,而浏览器也没有一个特定的 WEB API 帮你执行。

所以为了不阻塞后续代码只能延期执行,让其它代码先执行,执行完后再执行耗时任务和对其结果的依赖代码,即微任务。

每个宏任务都有一个微任务队列,里面放的就是这些延期代码。微任务的执行时机就是当前宏任务执行完,下一个宏任务执行前。这样就可以完美解决。

而 Promise 就是这样的实现
2023-01-11 10:56:09 +08:00
回复了 yezheyu 创建的主题 程序员 关于异步任务的一点疑问,有没有老哥帮忙解答下
@Mutoo 多谢老哥,明白了
2023-01-11 10:22:02 +08:00
回复了 yezheyu 创建的主题 程序员 关于异步任务的一点疑问,有没有老哥帮忙解答下
@elonmask 有道理,但如果不是 UI 相关,收尾代码纯粹 console.log 或者保存图片等等,另一个线程也能做到,是不是就没必要放到任务队列中等主线程执行呢?
2022-11-25 14:34:08 +08:00
回复了 yezheyu 创建的主题 程序员 如何定制 console.log 的打印结果?
@Great233

再次感谢老哥,最近重新看了 Object 上 Object.getOwnPropertyDescriptors() API ,其中提到了属性的是否可枚举,我才算彻底明白这个问题,也明白了是我当初这个问题问歪了,哈哈
2022-10-28 09:36:16 +08:00
回复了 yezheyu 创建的主题 程序员 如何定制 console.log 的打印结果?
@stefanieewu

谢谢!这就是我本意想问的答案,怪我描述不清,害的大家误解我的意思


还有,也多谢 @Great233 老哥的耐心解答
2022-10-27 20:00:50 +08:00
回复了 yezheyu 创建的主题 程序员 如何定制 console.log 的打印结果?
@valkyrjaE
确实,我不太知道怎么清楚准确的描述这个问题,我的问题
2022-10-27 19:59:37 +08:00
回复了 yezheyu 创建的主题 程序员 如何定制 console.log 的打印结果?
@Great233 我在 node 中试了试,console.log 就是只有浏览器中第一行的输出结果,打印数组也不会多打印 length 属性
2022-10-27 18:57:14 +08:00
回复了 yezheyu 创建的主题 程序员 如何定制 console.log 的打印结果?
@Great233

仔细想想,才发现是我自己理解错了

只有第一行的结果是 console.log 打印的结果,下面点开的属性是浏览器帮忙提取出来是吗?

我一直错误的以为下面点开的那部分也是打印的结果

所以一直很奇怪,为啥数组也算是对象的一种,为啥其打印出来会多打印一个 length ,原来是浏览器判断你打印的是数组,所以就帮你提取一个 length

这都是浏览器的行为,不是 console.log 帮我多打印一个 length

我理解的对吗
2022-10-27 18:38:34 +08:00
回复了 yezheyu 创建的主题 程序员 如何定制 console.log 的打印结果?
@Great233 谢谢老哥

![](www.hualigs.cn/image/635a5c08bf7ea.jpg)

所以这部分也会存在对象里面嵌套的属性,这里显示的属性不全都是 vm 直接打点就能调用,对吗?
2022-10-27 18:25:41 +08:00
回复了 yezheyu 创建的主题 程序员 如何定制 console.log 的打印结果?
@Great233 可能我描述的不准确

对比普通的对象实例

![]( https://www.hualigs.cn/image/635a5993846fa.jpg)

它打印出来的只有{ }中间的属性

按我理解打印 vue 实例就应该像上面的 tom 那样

这个图中显示的属性就应该只显示下面图中 {} 中的属性

![]( https://www.hualigs.cn/image/635a5c08bf7ea.jpg)

[img]https://www.hualigs.cn/image/635a5aafcfcf3.jpg[/img]



但我看 $el 也不在 { } 中,也非 defineProperty 定义的 getter 属性,为啥会打印出来
2022-10-04 11:57:00 +08:00
回复了 yezheyu 创建的主题 程序员 请教一个 vue 中组件复用的生成的页面间切换的问题
@Zzzz77
@tyx1703

还有上面的其它老哥
谢谢大家

新手让大家见笑了

现在基本明白了

首先 vue 中还是尽量少操作 dom

然后 UI 数据化,根据多个画板的数据存在一起,使用路由配合 watch 或 computed 选择性渲染
2022-09-29 09:59:15 +08:00
回复了 yezheyu 创建的主题 程序员 请教一个 vue 中组件复用的问题
@Zzzz77
那复用的组件生成的页面之间不希望有任何的关联,是不是用绑定 key 的方式最合适。

例如有下面一个场景:
user 组件中有个输入框,点击按钮切换页面时,希望表单数据只停留在当前页面,新切换的页面不能包含上一个页面的表单数据。

这种是不是最好就是借助绑定 key 渲染出的页面,同时使用 keepAlive 缓存

`<keep-alive> <User :name="data" :key="data" /> </keep-alive>`
2022-09-27 17:09:56 +08:00
回复了 yezheyu 创建的主题 程序员 请教一个 vue 中组件复用的问题
@cydysm
多谢老哥,明白了
2022-09-27 16:59:22 +08:00
回复了 yezheyu 创建的主题 程序员 请教一个 vue 中组件复用的问题
@vinsony
好使,多谢

能稍微解释下吗
2022-09-27 16:54:30 +08:00
回复了 yezheyu 创建的主题 程序员 请教一个 vue 中组件复用的问题
@cydysm
@EyebrowsWhite

就是说把需要变化的逻辑写在 watch 中是吗
2022-08-31 15:41:39 +08:00
回复了 yezheyu 创建的主题 程序员 请教一个高级语言中函数调用栈相关的问题
@hangbale 多谢老哥,明白了
2022-08-30 23:05:11 +08:00
回复了 yezheyu 创建的主题 程序员 请教一个高级语言中函数调用栈相关的问题
@lisongeee
@ScepterZ

这样理解你们看对吗?
当内部函数被 return 出去后,外部函数执行完,其调用栈中所有变量都会被销毁,而因为内部函数又对外部函数中变量有引用,js 就会在堆区开启一块空间保存引用的数据,以保证外部函数的变量在销毁后任能获取到,而堆区中这块数据就会被 gc 接管
2022-08-30 22:01:30 +08:00
回复了 yezheyu 创建的主题 程序员 请教一个高级语言中函数调用栈相关的问题
@hangbale

zh.javascript.info/closure

参考这篇博客,里面全篇没有提堆栈方面东西,所以像 js ,Python 这种跑在 Runtime 之上的软件,其调用栈规则其实和 C 的调用栈是没有参考性的是吗
2022-08-30 21:52:42 +08:00
回复了 yezheyu 创建的主题 程序员 请教一个高级语言中函数调用栈相关的问题
函数名这个例子好像举的不太对,不过就算没有对外层函数的引用,这会因为词法环境的缘故普通函数也会形成闭包吧
2022-08-30 21:44:21 +08:00
回复了 yezheyu 创建的主题 程序员 请教一个高级语言中函数调用栈相关的问题
@Al0rid4l 我看很多博客都有说所有函数都是闭包,假如把 js 脚本文件看成 main 函数,脚本内部定义的函数不就相当于内部函数,函数名不就至少是个外部变量的引用吗?

https://zh.javascript.info/closure
就像这篇博客结尾说的 v8 引擎优化
1  2  3  4  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2498 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 14ms · UTC 11:38 · PVG 19:38 · LAX 04:38 · JFK 07:38
Developed with CodeLauncher
♥ Do have faith in what you're doing.