javascript - 在for循环的for语句之外声明“i”变量会加快循环的执行,这是什么原因呢?
问题描述
我认为在 for 语句中声明变量 i 将只执行一次,并且在下一次迭代中, i 变量将递增 1 并与 arr.length 进行比较,而不管 for 语句中的第一个参数,我的意思是,这样我们在(for 语句)之外进行声明以便不通过循环执行此操作,请注意,此步骤将在每次迭代时被循环忽略,因此,这种行为如何能够加快 for 循环的执行?
var i;
var l = arr.length;
for (i = 0; i < l; i++) {
解决方案
由于JS中的变量提升i
,在循环外声明var
不会影响性能。
但是,与 相比,将数组长度归因于变量l
确实会提高性能,for (i = 0; i < arr.length; i++) {
因为不需要在length
每个循环轮次中访问该属性。
请注意,您也可以使用此语法,因为声明的第一部分for
只执行一次:for (var i = 0, l = arr.length; i < l; i++) {
另外,我个人更喜欢在循环之外声明它,因为不太了解 JS 的人可能会认为它的var
作用域是for
循环,但事实并非如此(与 相比let
)。另见CertainPerformance 的评论。
推荐阅读
- javascript - 如何将fabric js画布同步转换为具有背景的图像?
- sql - 如何更改 Laravel 中所有其他行的值?
- visual-studio-code - 如何禁用 VSCode 弹出“您没有用于调试的扩展程序”?
- android - Flutter:当我滚动到 NESTED ListView 的末尾时,我希望父 ListView 滚动
- forms - 如果表单未通过验证,则禁用提交按钮
- c - C中的平方根
- python - Python - ZipFile / Image.open
- flutter - 如何从 2 个嵌套的 PageViews 中获取屏幕上主要项目的索引?
- asp.net-core-webapi - Dot.Net Core 3.1 API 中 GetCookies 方法的扩展类是哪个?
- javascript - 可通过 Postman 调用 https Firebase Cloud Functions:“请求的 Content-Type 不正确。”