繁体   English   中英

JavaScript闭包

[英]Javascript Closures

因此,我创建了一个可变汽车,然后将其分配给一个函数,并添加了参数模型year。 然后参考参数在函数中创建一个对象。

然后创建“关闭”内部函数yourCar(),并在其中返回外部函数对象“属性”。 然后在外部函数中返回内部函数yourCar()以在全局范围内可用。

因此,据我了解,我认为内部函数可以访问外部函数的所有变量和函数。 因此,我将其称为yourCar(model,year); 获取对象变量。

但是不断收到错误消息:“ yourCar未定义” ...我在mozilla fox上使用便笺本进行测试和调试。 任何人都可以帮忙,所以我可以更好地理解它!

 var car = function(model, year){
    var Properties = {
       model: nissan,
       year: 2004
    }
    function yourCar() {
        return Properties;
    }

    return yourCar();
 }
 yourCar(model, year);

yourCar是在car内部定义的。 只有car内部的函数和变量才能访问yourCar 它对car功能来说是私人的。 因此,您不能在外部访问它。 你应该像这样实际上叫car

car (model, year);

您已经将yourCar定义为仅在car范围内的函数(或更准确地说,是绑定到car的匿名函数)。 因此,在car外部, yourCar毫无意义。 它是未定义的。

您似乎正在尝试执行以下操作:

var car = function(model, year){
    var Properties = {
       model: model,
       year: year
    };
    function yourCar() {
        return Properties;
    }

    return yourCar();
}
var result = car('nissan', 2004);

就像两个都说的那样,您正在尝试对错误的对象使用私有方法。

这是一个JSBIN演示: http ://jsbin.com/acohoYUP/2/edit?js,console

主要持有:

var car = function(model, year){
  var Properties = {
    model: "nissan",
    year: 2004
  };
  function yourCar() {
    return Properties;
  }

 return yourCar();
};

var updatedCar = function(model, year){
  var Properties = {
    model: model,
    year: year
  };
  function yourCar() {
    return Properties;
  }

  return yourCar();
};

var badCar = car("lemon", 1999);
var goodCar = updatedCar("ferrari", 2014);

您可以看到badCar的统计信息将是nissan2004 ,而不是传递的参数(例如,使用badCar.year )。

goodCar ,就像pswg建议的那样,它们是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM