Javascript函数
我对Javascript非常陌生,在某个地方我发现了这段代码Javascript函数,javascript,function,this,Javascript,Function,This,我对Javascript非常陌生,在某个地方我发现了这段代码 var myObject = { value: 0, increment: function (inc) { this.value += typeof inc === 'number' ? inc : 1; } }; 在上述对象中,递增函数使用此访问值变量。但是在像java这样的语言中,公共方法也可以访问私有成员,而不需
var myObject = {
value: 0,
increment: function (inc) {
this.value += typeof inc === 'number' ? inc : 1;
}
};
在上述对象中,递增函数使用此访问值变量。但是在像java这样的语言中,公共方法也可以访问私有成员,而不需要这个。。为什么这里不可能呢?因为这是Javascript,而不是Java。这两种语言之间没有任何联系或相似之处,即使Javascript的名称中有“Java”。因为这是Javascript,而不是Java。这两种语言之间没有任何联系或相似之处,即使Javascript的名称中有“Java”。这是因为您的范围。。。您可以这样尝试:
var myObject = (function(){
var value = 0,
increment = function (inc) {
value += typeof inc === 'number' ? inc : 1;
return value;
};
return {increment:increment}
})();
console.log(myObject.increment());
console.log(myObject.increment());
console.log(myObject.increment());
这是因为你的范围。。。您可以这样尝试:
var myObject = (function(){
var value = 0,
increment = function (inc) {
value += typeof inc === 'number' ? inc : 1;
return value;
};
return {increment:increment}
})();
console.log(myObject.increment());
console.log(myObject.increment());
console.log(myObject.increment());
因为value试图在全局范围内获取名为value的变量,而您在对象中,这是对象的属性。因为value试图在全局范围内获取名为value的变量,这里是一个对象,这是该对象的一个属性。每个JS函数都有一个对范围链的引用,它试图在其中查找变量。该链如下所示:
- 当前函数的局部变量
- 调用它的函数的局部变量
- (……)
- 全局变量
当前对象(及其字段)不在链中,因此您必须使用
this
引用它。每个JS函数都有一个范围链的引用,它试图在其中查找变量。该链如下所示:
- 当前函数的局部变量
- 调用它的函数的局部变量
- (……)
- 全局变量
当前对象(及其字段)不在链中,因此您必须使用
this
引用它。您不理解这个问题!是的-代码正在运行-他在问为什么他需要此部件您不理解此问题!是的-代码正在运行-他问为什么他需要这个部分?你的意思是范围是问题吗?功能在不同的范围内?你是说范围是问题所在吗?功能在不同的范围内?