Javascript函数

Javascript函数,javascript,function,this,Javascript,Function,This,我对Javascript非常陌生,在某个地方我发现了这段代码 var myObject = { value: 0, increment: function (inc) { this.value += typeof inc === 'number' ? inc : 1; } }; 在上述对象中,递增函数使用此访问值变量。但是在像java这样的语言中,公共方法也可以访问私有成员,而不需

我对Javascript非常陌生,在某个地方我发现了这段代码

  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

引用它。您不理解这个问题!是的-代码正在运行-他在问为什么他需要此部件您不理解此问题!是的-代码正在运行-他问为什么他需要这个部分?你的意思是范围是问题吗?功能在不同的范围内?你是说范围是问题所在吗?功能在不同的范围内?