[英]Closures in functions and objects
下面的片段完全相同。 第一:
var obj_button = {
clicked: 1,
click: function() {
console.log(clicked);
}
};
第二个:
var Func_button = function() {
var clicked = 1;
this.click = function() {
console.log(clicked);
}
}
但是当我想使用闭包时,第一种方法失败了:
func = new Func_button();
func.click(); // OK - works fine, outputs 1
obj_button.click(); // FAIL - he don't know what is "clicked"
所以我的问题是:为什么在第一种方法中,方法click()无法看到“clicked”参数。 不应该封闭这个参数(就像在第二个例子中一样)?
不,因为在第一个实例中clicked
是在对象范围内,而在第二个实例中它是在函数范围内。 this.click = function
也在函数范围内,但click: function () {
的内容在不同的范围内。
要使用第一个示例,您可以使用:
console.log(this.clicked);
如果重写第二个示例,也可以看到相同的行为:
var Func_button = function() {
this.clicked = 1;
this.click = function() {
console.log(clicked);
};
}
现在, func.clicked
将返回1
,但调用func.click()
将导致相同的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.