尽管我知道这let允许您声明范围仅限于块的变量,但我在与 javascript 闭包let一起var使用它时遇到了奇怪的差异。这是我的例子:
和let:
function buildFunction() {
var arr = [];
for(var i = 0; i < 3; i++) {
let j = i; //Using let to assign j
arr.push(
function(){
console.log(j);
}
)
}
return arr;
}
var fs = buildFunction();
fs[0]();
fs[1]();
fs[2]();Run Code Online (Sandbox Code Playgroud)
上面的代码片段输出:
0
1
2
Run Code Online (Sandbox Code Playgroud)
和var:
上面的代码片段输出如下:
2
2
2
Run Code Online (Sandbox Code Playgroud)
我的问题是:
如果您在块内部使用var并在执行期间为其分配值,那么它不应该像let一样工作并在内存中存储j的不同副本吗?
javascript在闭包中处理letand的方式是否不同?var
对此的任何澄清将不胜感激。
我正在分析一些第三方JavaScript库,并遇到了一种方法,人们可以快速参考核心原型.这样做有什么性能上的好处吗?任何人都能用一个例子来解释这个吗
var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
// Create quick reference variables for speed access to core prototypes.
var
push = ArrayProto.push,
slice = ArrayProto.slice,
concat = ArrayProto.concat,
toString = ObjProto.toString,
hasOwnProperty = ObjProto.hasOwnProperty;
Run Code Online (Sandbox Code Playgroud)