Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理JavaScript中构造函数中声明的变量?_Javascript - Fatal编程技术网

如何处理JavaScript中构造函数中声明的变量?

如何处理JavaScript中构造函数中声明的变量?,javascript,Javascript,当我执行这个时 function jQueryValidatorWrapper(formId, rules, messages) { var validator = $("form:visible[id='" + formId + "']").validate({ onchange: false, messages: messages, r

当我执行这个时

function jQueryValidatorWrapper(formId, rules, messages) {
    var validator = $("form:visible[id='" + formId + "']").validate({
                         onchange: false,
                         messages: messages,
                         rules: rules
                     });

    this.validate = function (hideErrors) {
        var showErrorMessage = hideErrors ? false : true;

        // What does 'validator' refer to?
        var result = validator.form();
    };
}
jQueryValidatorWrapper函数只有一个用它声明的方法,所以当构造函数执行时,它只是用validate方法创建了一个对象

jQueryValidatorWrapper中声明的验证程序变量会发生什么变化?它没有前缀,因此它不是正在构造的对象的一部分

验证器变量是全局变量吗?或者它是验证方法闭包的一部分?

本地验证程序变量不是全局变量;由于闭包,它只能在validate方法中访问

根据Douglas Crockford的文章,可以将其视为jQueryValidatorWrapper对象的私有成员:

3个构造函数参数也是如此。

本地验证器变量不是全局变量;由于闭包,它只能在validate方法中访问

根据Douglas Crockford的文章,可以将其视为jQueryValidatorWrapper对象的私有成员:


3个构造函数参数也是如此。

验证器不是全局变量。。。它将存在于闭包中,尽管构造函数仍然是函数。局部变量的处理方式和作用域的工作方式没有区别。验证器不是全局变量。。。它将存在于闭包中,尽管构造函数仍然是函数。局部变量的处理方式和作用域的工作方式没有区别。因此,如果我每次为3个构造函数参数创建多个具有不同数据的jQueryValidatorWrapper实例,是否会为以前的实例修改闭包环境?不,每个实例都有自己的副本。下面是一个例子来说明:@Lakeland FL每次调用一个函数时,都会创建一个全新的执行上下文,因此在此实例中也会创建一个全新的闭包。因此,如果我要创建jQueryValidatorWrapper的多个实例,每次使用3个构造函数参数的不同数据,是否会为以前的实例修改闭包环境?不,每个实例都有自己的副本。这里有一个例子来说明:@Lakeland FL每次调用函数时,都会创建一个全新的执行上下文,因此在这个实例中也会创建一个全新的闭包。
var validatorObj = new jQueryValidatorWrapper('testForm', [], []);
validatorObj.validate();