Javascript中的闭包和原型
我是Javascript新手。我试着亲自使用闭包和原型 在下面的代码段中,调用了min函数,但console.log(y)打印的是未定义的。为什么会这样,以及this.val将引用什么对象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
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();