0

我是 javascript 新手,我写过这样的代码

file myclass.js
//----------------------------------------------

function myclass () {
     this.functionA = function (value) { 
       var _this = this;
       _this.functionB ();

      }

    this.functionB = function () { 
     // here I am using the value passed to functionA when it is called.
        alert(value);
      }
}

//------------------------------------------------ ------------------

file main.js
//-----------------------------------------   
    mc = new myclass();
    mc.functionA (45);
//-------------------------------------

在这里,我完全混淆了我是我的主文件,我调用了一个函数A,传递了一个参数,当我在函数A 中调用函数B 时,我没有在函数B 中传递参数,但我仍然可以访问它。任何人都可以解释一下这怎么可能?

PS 值不是全局的,也没有在其他任何地方使用

谢谢

4

1 回答 1

1

我无法重现您的行为,但我假设您在外部范围中定义了另一个变量,该变量作为参数value传递给。functionA所以你看到的不是一个,而是两个具有相同名称和值的变量。

像这样的东西:

function SomeConstructor() {
    var value = 'Surprise'; // * VALUE_1

    this.functionA = function (value) { // VALUE_2
        var _this = this;
        _this.functionB ();
    }

    this.functionB = function () { 
        // Here you're using the value from starred line above
        // VALUE_1
        alert(value);
    }

    // Here you also pass the same value and later assumes that 
    // functionB sees it as a parameter (VALUE_2)
    functionA(value);
}

请注意,如果您重命名value参数 forfunctionAvalue外部范围内的变量,所有混淆都会消失:

function SomeConstructor() {
    var value1 = 'Surprise';

    this.functionA = function (value2) {
        var _this = this;
        _this.functionB ();
    }

    this.functionB = function () { 
        // Here you're using the value from starred line above
        alert(value1);
    }

    // Here it's clear that the parameter you're passing is not used at all
    functionA(value1);
}

检查您的代码,看看是否是这种情况。


编辑:在您编辑完您的问题后,我仍然无法重现您的案例。检查这是否是页面上唯一的脚本。也许,您安装了一些浏览器插件或扩展程序,将代码添加到您的页面。在 Chrome 开发工具中,我得到:

"ReferenceError: value is not defined"
于 2012-06-18T06:58:28.117 回答