我在JS旅程的开始阶段,我在解释这段代码内容时遇到了问题:
function createMessages() {
var i = 0, messagesFuncs = [];
for (i = 0; i <= 3; i++) {
messagesFuncs.push(function () { //this is a closure
console.log(i);
});
}
return messagesFuncs;
}
messages = createMessages();
messages[0](); //4
messages[1](); //4
messages[2](); //4
我很好奇为什么在所有调用消息的情况下,结果都是 4 ,为什么不按照升序排列来自messagesFunc数组的数字如下: 1,2,3 ?
问题2:
a = 10;
(function() {
var a = 5;
var x = {
a: 3,
method: function foo(arg1, arg2) {
console.log(this.a);
console.log(arg1);
console.log(arguments.slice(1,2));
}
};
var foo = x.method;
foo(1, 2); //10, 1
x.method(1, 2); //3,1
})();
为什么这两个电话不一样?为什么在第一种情况下this.a被赋予10而不是5这10是在函数之外所以为什么这个关键字没有使用在函数内声明的变量?
在第二个调用中,我假设当我们直接调用 x.method ( - object属性)时,这个关键字只在我们的对象(x)中运行?
我期待着任何回应和指导。干杯