Javascript 外部变量和jQuery函数内部的作用域

Javascript 外部变量和jQuery函数内部的作用域,javascript,jquery,html,Javascript,Jquery,Html,我有下面的代码,它应该在每次调整窗口大小时运行test() var i = 0; var test = (function() { console.log(i++); })(); $(window).resize(function() { test(); }); 代码: 但是,我得到了uncaughttypeerror:undefined不是一个函数,因为test()在resize中不可用 有人能解释一下原因吗?拥有(1)自动执行功能,(2)能够在resize中调用它的解决方

我有下面的代码,它应该在每次调整窗口大小时运行
test()

var i = 0;
var test = (function() {
    console.log(i++);
})();

$(window).resize(function() {
    test();
});
代码:

但是,我得到了
uncaughttypeerror:undefined不是一个函数,因为
test()
在resize中不可用


有人能解释一下原因吗?拥有(1)自动执行功能(2)能够在
resize
中调用它的解决方法是什么?

您可能想这样做:

var test = function() {
    console.log(i++);
};
与此相反:

var test = (function() {
    console.log(i++);
})();
更新小提琴:

第二个表单将当场调用函数,因为它没有return语句,它将返回undefined,所以test将是undefined


为什么您希望测试是自动执行的?

下面应该可以做到这一点,尽管它实际上并不比仅在声明之后调用函数更方便:

var i = 0;
var test = (function test() {
    console.log(i++);
    return test;
})();

$(window).resize(function() {
    test();
});

自动执行是初始化该函数所必需的一种方式。我可以做
test()之后立即执行,但看起来不清晰如果确实必须执行该函数,请从中返回另一个将分配给测试变量的函数。返回的函数将在window.resize上被调用。更好的做法是,执行类似于模块模式的操作,并将resize时需要调用的函数添加到变量中<代码>测试
调整大小
中可用,只是您将其设置为“未定义”。@Kevin但为什么它也不执行?您当前应该在控制台中获得1个日志,然后出现错误。