Javascript中的闭包和原型

Javascript中的闭包和原型,javascript,closures,prototype,Javascript,Closures,Prototype,我是Javascript新手。我试着亲自使用闭包和原型 在下面的代码段中,调用了min函数,但console.log(y)打印的是未定义的。为什么会这样,以及this.val将引用什么对象 function Air() { this.text = "Inside Air"; }; Air.prototype.min = function() { this.val = "Inside min"; console.log("Inside min"); }; var x = new

我是Javascript新手。我试着亲自使用闭包和原型

在下面的代码段中,调用了min函数,但console.log(y)打印的是未定义的。为什么会这样,以及this.val将引用什么对象

function Air() {
  this.text = "Inside Air";

};

Air.prototype.min = function() {
  this.val = "Inside min";
  console.log("Inside min");
};

var x = new Air();
var y = x.min();
console.log(y);
在第二个代码段中,此代码运行良好

 function Air() {
        console.log("InsiAir");
      return {
        min: function() {
          console.log("Inside min");
        }
      };
    }

var air = Air();
air.min();
然而,这并不重要

function Air() {
    function min() {
        console.log("Inside Min");
    }

}

var air = Air();
air.min();
有人能解释一下第一个片段到底发生了什么吗 创建一个新的
Air
对象,该对象被指定给
x
。在构造函数中,设置新对象的
text
属性,该属性不再使用。然后,调用原型上的
x
上的
min
方法。在该方法中,将设置一个名为
val
的实例属性,该属性未被使用<代码>最小值记录到控制台。
min
方法不返回任何内容,这与返回
undefined
相同。因此,
undefined
的值被分配给变量
y
。未定义的
y
值记录到控制台

第二段 调用
Air()
,它将返回一个对象。该对象被分配给变量
air
。对由
air
表示的对象调用
min
方法。在
min
功能中,它会登录到控制台。
min
函数不返回任何内容,这与返回
undefined
相同。返回的值将被忽略(尽管控制台可能会打印它)

第三段 调用
Air()
函数,该函数不返回任何内容,这与返回
undefined
相同。
undefined
的值分配给变量
air
。试图调用
undefined
上的
min
方法,这会导致运行时错误,例如“无法读取未定义的
min
属性”
min
Air
函数中的一个本地函数,只能从
Air
中调用,但不是,因此它不起任何作用

闭包 这里与闭包无关,闭包在通常使用的意义上是指某些函数访问外部范围中的变量(“关闭”)的情况。例如,扩展第二个示例:

 function Air() {
   var magic = 42;

   return {
     min: function() {
       return magic;
     }
   };
 }

var air = Air();
console.log(air.min());
函数/方法
min
现在在外部范围内的变量
magic
上“关闭”。即使在
Air()
返回后,返回对象上的
min
方法仍然可以访问
magic
变量,因此
42
将被记录到控制台

在第一个例子中:

它显示为
undefined
,因为
min
函数不返回任何内容

如果使用
var y=x.min()
min
函数不返回任何内容,则
y
变量将具有
未定义的值

如果想要工作,只需使用:

var x = new Air();
x.min();
类似于
void
方法

在第二段中

Air()
不返回任何内容(未定义)。
undefined
的值分配给变量
air
。然后,当您尝试访问
min
方法时,将收到错误

在上一个示例中,它不起作用,因为您不返回任何内容


min
不返回任何内容。因此,默认情况下,它不会返回对该对象的引用或其他内容?@charlietfl function Air(){function min(){console.log(“Inside min”);}}出于相同的原因,此代码段也不起作用?上一个示例不起作用,因为
Air
不返回任何内容。默认情况下,没有
return
语句的函数总是返回
undefined
。您只需声明一个本地函数
min
,不返回任何内容。好的,要使用闭包,我总是需要返回内部函数才能使用它们吗?@user3587856:JavaScript中的每个函数在技术上都是闭包。@FelixKling您能解释一下什么是每个函数都是闭包吗?@user3587856:闭包是一个函数,它引用了创建它的环境,用于解析自由变量。每个函数都可以在JavaScript中实现这一点,因此每个函数都是闭包。“使用闭包”是什么意思?
function Air() {
  function min() {
    console.log("Inside Min");
  }
}

var air = Air();
air.min();
 function Air() {
   var magic = 42;

   return {
     min: function() {
       return magic;
     }
   };
 }

var air = Air();
console.log(air.min());
function Air() {
   this.text = "Inside Air";
};

Air.prototype.min = function() {
  this.val = "Inside min";
  console.log("Inside min");
};

var x = new Air();
var y = x.min();
console.log(y);
var x = new Air();
x.min();
function Air() {
    return {
        min() {
        console.log("Inside Min");
        }
    }
}
var air=Air();
air.min();