注意js运行时先执行变量提升,然后在从上往下执行。
/*
相当于:
var a;
function a() {}
a = 1;
*/
var a = 1;
function a() {}
console.log(a); // 输出 1
/*
相当于:
var a;
a = {
x: 'x',
a: a, // 此时a是undefined
};
*/
var a = {
x: 'x',
a: a,
};
console.log(a); // 输出 {x: "x", a: undefined}
var a = {x:'x'};
a.a = a;
console.log(a); // 输出 {x: "x", a: {…}} a可以无限展开
var a = 100;
function testResult() {
var b = 2 * a;
var a = 200; // 这里的 a 会覆盖外面的 a
var c = a / 2;
console.log(b, c); // NaN 100
}
testResult();
function createFunctions() {
var result = new Array();
for(var i = 0; i < 10; i++) {
var j = i;
result[i] = function() {
return j; // j 存在变量提升,循环结束后 j 为 9
}
}
return result;
}
createFunctions().forEach(item => console.log(item())) // 10 个 9
网友评论