函数超出作用域

Function out of scope?

本文关键字:作用域 函数      更新时间:2023-09-26

我有一个函数定义如下:

window.onload = function() {
      var ids = document.getElementById("idname");
      function myFunction(){
            /...*use ids var in here*./
      }
}

我试图从按钮onclick在html中调用myFunction:

<button onclick="myFunction();"></button>

但是它说myFunction没有定义。我理解,因为这是在window.onload内部。我该如何解决这个问题?我需要window.onload,因为我需要使用document.getElementById("testID")来获取内容。

我需要窗户。onload因为我需要使用document.getElementById(" testd ")来获取内容

不,你不需要window.onload。您只需将代码放在文档中ID为testID的元素之后的位置。

的例子:

<div id="testID"></div>
<script>
    var ids = document.getElementById("testID");
    function myFunction(){
        /...*use ids var in here*./
    }
</script>

然而,如果你想继续使用window.onload,那么我建议使用内联事件处理程序,而是与JS绑定处理程序:

window.onload = function() {
    var ids = document.getElementById("testID");
    ids.onclick = function(event){
      /...*use ids var in here*./
    }
};

(这可能是一件好事)。

最后,您可以使用thisevent.target在事件处理程序中获取对元素的引用:

<div id="testID"></div>
<script>
    document.getElementById("testID").onclick = function(event) {
      // access element via `this` or `event.target`
    };
</script>

您在function中定义了它,因此它被锁定在该范围内。也许你想在外边定义它:

function myFunction() {
  var ids = document.getElementById("idname");
  // ...
}
window.onload = function() {
  // ...
}
需要注意的是,这是非常老派的JavaScript。你可以使用jQuery之类的东西来清理它,它看起来像这样:
$(function() {
  // Any initialization after page load.
});
function myFunction() {
  var ids = $('#idname');
  // ...
}