Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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 SetInterval调用时出现严格模式作用域错误_Javascript_Jquery - Fatal编程技术网

Javascript SetInterval调用时出现严格模式作用域错误

Javascript SetInterval调用时出现严格模式作用域错误,javascript,jquery,Javascript,Jquery,下面是我试图做的一个伪例子 在非严格模式下,这是可行的,但在严格模式下,当setInterval触发时,我会得到一个未定义的错误。该脚本作为插件从另一个jquery脚本调用,然后调用init部分 从这里看,这似乎是一个全局范围/上下文问题,但我不知道如何继续 (function($, window, document) { 'use strict'; // remove and things work var opts,test; test = function(opt

下面是我试图做的一个伪例子

在非严格模式下,这是可行的,但在严格模式下,当setInterval触发时,我会得到一个未定义的错误。该脚本作为插件从另一个jquery脚本调用,然后调用init部分

从这里看,这似乎是一个全局范围/上下文问题,但我不知道如何继续

(function($, window, document) {
    'use strict'; // remove and things work
    var opts,test;

    test = function(options) {
        opts = $.extend(test.prototype.opts, test.prototype.defaults, options);
    };

    test.prototype.Save = function () {
        console.log('hi');
    };

    test.prototype.defaults = {
        _interval_id: null
    };

    test.prototype.opts = {};

    $.bla.plugins.foobar = function() {
        var base = this,
            bar;

        base.init = function() {
            bar = new test();
            opts = test.prototype.opts;
            bar.Save(); // works
            opts._interval_id = setInterval('bar.Save();', 10000); //  called but bar is not defined
        };
    };
})(jQuery, window, document);

当字符串由
setInterval
解释时,它在全局范围内,而不是调用它的函数的范围内。传递要调用的实际函数,而不是字符串:

setInterval(bar.Save, 10000);
如果允许修改
bar
bar.Save
,并且希望自动拾取更改,则应传递一个函数,该函数每次都会对其重新求值:

setInterval(function() { bar.Save(); }, 10000);

当字符串由
setInterval
解释时,它在全局范围内,而不是调用它的函数的范围内。传递要调用的实际函数,而不是字符串:

setInterval(bar.Save, 10000);
如果允许修改
bar
bar.Save
,并且希望自动拾取更改,则应传递一个函数,该函数每次都会对其重新求值:

setInterval(function() { bar.Save(); }, 10000);
你搞定了。。。这(两种方式)都很有魅力,非常感谢!你搞定了。。。这(两种方式)都很有魅力,非常感谢!