如何正确调用嵌套的JavaScript函数

时间:2014-05-25 07:00:50

标签: javascript toggle

我试图设置一个嵌套函数,我可以在整个脚本中调用它,但我一直得到"错误未定义不是函数"。也许有人可以帮我解决如何正确地做到这一点。

首先我设置全局变量:

var trigger = document.getElementById('trigger');
var subject = document.getElementById('subject');

然后我创建一个显示/隐藏功能:

var toggleVis = function() {

    function showSomething() {
        trigger.classList.add("active");
        subject.classList.add("active");
    }

    function hideSomething() {
        trigger.classList.remove("active");;
        subject.classList.remove("active");
    }

}

然后我设置我的事件监听器:

trigger.addEventListener('click', function() {

    if ( subject.classList.contains("active") ) {
        toggleVis.hideSomething();
    }
    else {
        togglePicker.showPicker();
    }
}); 

我尝试这样做的原因是,页面上有一些需要访问显示/隐藏功能的主题的其他触发器。

2 个答案:

答案 0 :(得分:1)

您无法访问函数内部的函数,它们超出范围,您可以将它们作为属性附加到包装函数,但看起来您只需要一个对象

var toggleVis = {
    showSomething: function() {
        trigger.classList.add("active");
        subject.classList.add("active");
    },
    hideSomething: function() {
        trigger.classList.remove("active");;
        subject.classList.remove("active");
    }
}

答案 1 :(得分:1)

您的togleVis变量是一个函数,而不是object,因此您无法执行toggleVis.hideSomething()。尝试将代码更新为:

var toggleVis = (function() {
    return {
        showSomething : function () {
            trigger.classList.add("active");
            subject.classList.add("active");
        },

        hideSomething : function () {
            trigger.classList.remove("active");;
            subject.classList.remove("active");
        }
    };

}());

使用此toggleVis现在是一个包含两个属性showSomethinghideSomething函数的对象。