滿滿的愛 2022-05-04 13:54:04
怎么感觉大家回答的都是表层的东西...栈和堆这些都知道哪个可改变哪个不可改变...问的应该是怎么做到不可改变的吧?
其实题目想要考察的就是 javascript 表面语义的东西。
具体不同类型的声明产生的变量在内存中究竟如何存储,那要看 javascript engine 内部是如何实现的。这些实现细节对于上层前端开发者来讲了解即可。如果你真的想要了解究竟是分配在栈上还是堆上,去看 V8,spiderMonkey这些引擎的代码(个人觉得如果不做引擎这块,纯属看个人兴趣去深入了)。这些引擎内部是用 C 或 C++ 这种更加方面操作内存的语言写的。也就知道实现原理是什么了。明白了 十分感谢解惑 因为总觉得这样回答似乎很简单 看来是我想复杂了
并且可能非常多前端开发者对于计算基础的知识并不牢靠。比如什么是栈和堆?操作系统的栈和堆概念和编程语言的栈、堆概念一致吗(一般我们了解程序的堆栈概念来自于 C 语言)?和传统的数据结构中的栈结构和二叉堆又有什么关联呢?等等这些概念。
了解了这些概念,是不是有必要去研究下 GC(garbage collection)?
前端可能更加偏向于体验一点。
滿滿的愛 2022-05-04 13:50:23
while(position < arguments.length) args.push(arguments[position++]);直接换成 下面这样会不会好点
if(position < arguments.length) args = args.concat([].slice.call(arguments, position));
不一样吧,原文的意思是:将arguments[position]这个值放入到args中;你改后的意思是:将arguments从position位置截取到数组最后一项的所有值放入到args中;原文放入了一个值,你放入了从position位置到最后一个位置的好几个值
滿滿的愛 2022-05-04 04:37:23
forEach是不能阻塞的,默认是请求并行发起,所以是同时输出1、2、3。
串行解决方案:
async function test() { for (let i = 0; i < list.length; i++) { let x = list[i] const res = await square(x) console.log(res) } }
同时输出的是 1、2、3 的平方也就是 1 、4、9
- 共 1 页
- 1
第 133 题:用 setTimeout 实现 setInterval,阐述实现的效果与 setInterval 的差异?