Javascript 如何仅通过HTML调用函数内部的函数

Javascript 如何仅通过HTML调用函数内部的函数,javascript,html,function,call,Javascript,Html,Function,Call,我仅仅使用HTML无法访问函数内部的函数。 如何仅使用HTML调用setLayout()还是只能在Javascript中调用 <button onclick="customize.setLayout('b.html');">Click Please</button> 根本无法调用setLayout 在其他函数中定义的函数的作用域为该函数。它们只能由该范围内的其他代码调用 如果希望能够调用customize.setLayout,则必须首先创建customize(可以是函数

我仅仅使用HTML无法访问函数内部的函数。 如何仅使用HTML调用setLayout()还是只能在Javascript中调用

<button onclick="customize.setLayout('b.html');">Click Please</button>

根本无法调用
setLayout

在其他函数中定义的函数的作用域为该函数。它们只能由该范围内的其他代码调用

如果希望能够调用
customize.setLayout
,则必须首先创建
customize
(可以是函数,但不需要是函数),然后需要将
setLayout
作为该对象的属性

customize.setLayout = function setLayout(text) { /* yada yada */ };

在函数中调用函数的多种方法。首先,内部函数在显式公开之前对外不可见,只有一种方式:

function outerobj() {

    this.innerfunc = function () { alert("hello world"); }

}
这定义了一个对象,但当前没有实例。您需要先创建一个:

var o = new outerobj();
o.innerfunc();
另一种方法:

var outerobj = {

    innerfunc : function () { alert("hello world"); }

};
这将定义一个可立即使用的对象
outerobj

outerobj.innerfunc();
简单回答:您不能在任何地方使用此设置调用
setLayout()

原因是,
setLayout()
customize()
之外不可见,甚至在其他
JavaScript
代码中也不可见,因为它是在
customize()
内部本地定义的,因此它具有仅在
customize()
内部可用的本地作用域。就像其他人提到的,还有其他可能的方法。。。(二)

您可以将
setLayout()
的响应作为
customize()
的方法返回,并在
HTML
中使用它,如
customize().setLayout('b.HTML')例如

<button onclick="customize().setLayout('b.html');">Click Please</button>

另一种方法 您还可以定义您的主要功能,即
customize
as。这样,在
HTML
节中调用其方法时可以省略括号

<button onclick="customize.setLayout('b.html');">Click Please</button>

如果你坚持这样做,也许可以定义setLayout,然后调用它, 大概是这样的:


函数自定义(文本、调用集布局){
if(CallSetLayout){
(功能设置布局(文本){
//做点什么
警报(文本);
})(案文);
}
}

单击“请”
您需要将其视为对象和方法

<button onclick="customize().setLayout('b.html');">Click Please</button>

那是错误的。我不明白。你用参数表调用“customize”,即使它不带参数,也永远不会传递给“setLayout”。你永远不应该在函数内部构造函数。请拼写检查你的问题标题。这根本不起作用,五秒钟的控制台测试会显示这一点。您的“另一种方法”甚至不是有效的JS语法。@torazaburo oops是的,只是更改了语法。请在发布之前测试您的建议。这根本不起作用。请尝试这个解决方案。好吧,这个可行,这很有趣。我想知道更多,为什么在函数setLayout()和“(text);”的后面有“()”结尾。它是某种定义函数吗?。我就是不明白怎么读。@Mes,这个东西叫做“闭包”,一个定义好的函数,然后自己执行。它在javascript中定义模块时非常常用。定义后的(文本)正是以“text”作为参数的函数调用
<button onclick="customize.setLayout('b.html');">Click Please</button>
var customize = (function () {

    var setLayout = function (text) {
        var selectedLayout = text;
        layout += selectedLayout;
        $.get(layout, function (data) {
            $("#layout-grid").html(data);
        });
    };

    return {
        setLayout: setLayout
    };

})();
<button onclick="customize().setLayout('b.html');">Click Please</button>
function customize() {

     this.setLayout = function setLayout(text) {

        var selectedLayout = text;
        layout += selectedLayout;
        $.get(layout, function (data) {
            $("#layout-grid").html(data);
        });
    }
    return this;
}