Javascript了解关闭和提升

时间:2016-10-14 17:30:30

标签: javascript closures

我在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)中运行?

我期待着任何回应和指导。干杯

0 个答案:

没有答案