javascript范围实际上不是全局的

时间:2018-01-05 19:16:40

标签: javascript function scope

var _gquill;
var _gform;

function quillFunctionSetup(quillvar, quillformvar, quillsubmitvar) {   
    _gquill = new Quill("#".concat(quillvar), {
        modules: { toolbar: true },
        theme: 'snow'
    });
   
    _gform = document.getElementById(quillformvar);
    _gform.onsubmit = function(quillsubmitvar, _gquill) {     
        var about = document.getElementById(quillsubmitvar);       
        about.value = _gquill.container.firstChild.innerHTML;
        return false;
    };
}
<script src="https://cdn.quilljs.com/1.0.0/quill.js"></script>
<link href="https://cdn.quilljs.com/1.0.0/quill.snow.css" rel="stylesheet">
<form action="{% url 'SecurityTarget:stview' ST_Title.id %}" method="post" id="overviewform">
  <div id="quilleditor" >{{ST_Title.OverviewDescription}}</div>
  <input type="hidden" name = "new_overview" id="new_overview"/>
  <input type="submit" value="Save Toe Overview" />
</form>
<script type="text/javascript">quillFunctionSetup("quilleditor", "overviewform", "new_overview");</script>

所以这不起作用,我无法理解为什么。所以羽毛笔部分工作正常,当它是一个符合html定义的脚本时,一切都很好。我把它移到标题然后什么都没有用,因为元素还没有定义?所以我将它包装在一个函数中并将其称为内联,但随后我的提交按钮停止运行,我仍然不知道为什么,但是 function(quillsubmitvar, _gquill) 将quillsubmitvar添加到上面的行(它最初没有使它工作)这没有任何意义,这是在原始函数的范围内。

仍然使用此代码

about.value

永远不会被分配? 当在这个编辑器中运行这个脚本时,它也会对函数

进行未定义的引用
quillFunctionSetup

但它是在标题中定义的,它在我的网站上运行?我很困惑任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

问题出在这一行:_gform.onsubmit = function(quillsubmitvar, _gquill) {

在这种情况下,quillsubmitvar_gquill未被传入,它们被列为将传递给该函数的参数的名称,与第一个相同声明作品function quillFunctionSetup(quillvar, quillformvar, quillsubmitvar) {

Javascript是词法范围的,意味着quillFunctionSetup内的任何内容都已经可以访问该闭包内定义的其他变量以及它之外的任何变量,但在其他地方的单独闭包内没有定义(在本例中不适用)。

_gform.onsubmit = function() {     
    var about = document.getElementById(quillsubmitvar);       
    about.value = _gquill.container.firstChild.innerHTML;
    return false;
};

应该按预期工作