ECMAScript 6介绍了该let
声明.我听说它被描述为"本地"变量,但我仍然不太确定它与var
关键字的行为有何不同.
有什么区别?何时应该let
使用var
?
我从书中学到了你应该写这样的循环:
for(var i=0, len=arr.length; i < len; i++){
// blah blah
}
Run Code Online (Sandbox Code Playgroud)
所以arr.length
每次都不会计算.
其他人说编译器会对此做一些优化,所以你可以写:
for(var i=0; i < arr.length; i++){
// blah blah
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道哪种是最好的练习方式?
无论功能差异如何,使用新关键字"let"和"const"对"var"的性能有任何广义或特定的影响吗?
运行程序后:
function timeit(f, N, S) {
var start, timeTaken;
var stats = {min: 1e50, max: 0, N: 0, sum: 0, sqsum: 0};
var i;
for (i = 0; i < S; ++i) {
start = Date.now();
f(N);
timeTaken = Date.now() - start;
stats.min = Math.min(timeTaken, stats.min);
stats.max = Math.max(timeTaken, stats.max);
stats.sum += timeTaken;
stats.sqsum += timeTaken * timeTaken;
stats.N++
}
var mean = stats.sum / stats.N;
var sqmean = stats.sqsum / stats.N;
return {min: stats.min, max: stats.max, mean: mean, …
Run Code Online (Sandbox Code Playgroud) 有人决定做一个快速测试,看看本机客户端在速度方面与javascript的比较.他们通过运行10 000 000 sqrt计算并测量所花费的时间来做到这一点.结果用javascript:0.096秒,用NaCl:4.241秒......怎么会这样?速度不是首先使用NaCl的原因之一吗?或者我错过了一些编译器标志或什么?
下面是运行的代码:
clock_t t = clock();
float result = 0;
for(int i = 0; i < 10000000; ++i) {
result += sqrt(i);
}
t = clock() - t;
float tt = ((float)t)/CLOCKS_PER_SEC;
pp::Var var_reply = pp::Var(tt);
PostMessage(var_reply);
Run Code Online (Sandbox Code Playgroud)
PS:这个问题是出现在本机客户端邮件列表中的某些内容的编辑版本
为了使一个极端的总结,之间的差异var
,并let
是一个范围之内他们的生活.
(function() {
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(`i: ${i}`);
}, i * 100);
}
// 5, 5, 5, 5, 5
for (let j = 0; j < 5; j++) {
setTimeout(function() {
console.log(`j: ${j}`);
}, 1000 + j * 100);
}
// 0, 1, 2, 3, 4
}());
Run Code Online (Sandbox Code Playgroud)
i
(声明var
)生活在整个function
j
(声明着let
)仅存在于for
循环内.对我来说,这意味着javascript,在每次迭代之后,除了声明和赋值给变量之外,let
还需要执行额外的步骤:清理 …
我一直在阅读有关ES6 Let关键字与现有var关键字的内容.
我有几个问题.我理解"范围"是let和var之间的唯一区别,但它对大局意味着什么?
function allyIlliterate() {
//tuce is *not* visible out here
for( let tuce = 0; tuce < 5; tuce++ ) {
//tuce is only visible in here (and in the for() parentheses)
};
//tuce is *not* visible out here
};
function byE40() {
//nish *is* visible out here
for( var nish = 0; nish < 5; nish++ ) {
//nish is visible to the whole function
};
//nish *is* visible out here
};
Run Code Online (Sandbox Code Playgroud)
现在我的问题:
是否比var具有任何内存(/性能)优势?
除了浏览器支持,我应该使用let over var的原因是什么? …
使用ES6"let"或"const"声明代替旧的忠实var会有任何速度优势吗?
javascript ×6
let ×4
ecmascript-6 ×3
performance ×3
var ×3
const ×2
benchmarking ×1
c++ ×1
loops ×1
scope ×1
v8 ×1