Javascript 无法调用在同一父函数(DOM)中声明的函数

Javascript 无法调用在同一父函数(DOM)中声明的函数,javascript,dom,Javascript,Dom,问题解决了。它与函数无关,只是CSS优先级问题。 我在分配给window.onload的匿名函数中声明了一个名为alternateTableColor()的函数。此功能可更改网页上表格的颜色。当它在没有嵌套到任何其他函数的情况下被调用时,它可以正常工作。但是当它嵌套在同一环境中声明的另一个函数中时,它就不起作用了。你能帮忙吗 函数my$(id){ 返回文档.getElementById(id); } 函数deleteTr(oTr){ oTr.parentNode.removeChild(oTr

问题解决了。它与函数无关,只是CSS优先级问题。

我在分配给window.onload的匿名函数中声明了一个名为alternateTableColor()的函数。此功能可更改网页上表格的颜色。当它在没有嵌套到任何其他函数的情况下被调用时,它可以正常工作。但是当它嵌套在同一环境中声明的另一个函数中时,它就不起作用了。你能帮忙吗

函数my$(id){
返回文档.getElementById(id);
}
函数deleteTr(oTr){
oTr.parentNode.removeChild(oTr);
}
设currentId=2;
让oTable=document.getElementsByTagName('table')[0];
设aAs=oTable.tBodies[0].getElementsByTagName('a');
函数alternateTableColor(){
for(设i=0;i
Javascript按函数作用域变量

function a() {  
  var b = 1;
  function c() {
  }
}
// b is undefined
// c is also undefined

请注意,
function c(){}
相当于
var c=function(){};

function a () {
 function b() {
    console.log('b');
 }
 function c() {
    console.log('c');
    b();
 }

 c();
}

a(); // prints c then b

您可以将函数调用为您的有意位置

window.onload = function() {
    let oTable = document.getElementsByTagName('table')[0];
    window.alternateTableColor = function(){
        for (let i = 0; i < oTable.tBodies[0].rows.length; i++) {
            if(i % 2) {
                oTable.tBodies[0].rows[i].style.backgroundColor = 'lightgrey';
            } else {
                oTable.tBodies[0].rows[i].style.backgroundColor = '';
            }
        }
    }
    alternateTableColor(); // it works here

    let oBtn = document.getElementById('reset-color');
    oBtn.onclick = function(){;
        console.log('testing'); // console.log successfully
        alternateTableColor(); // you can call!!!!
    }
}
window.onload=function(){
让oTable=document.getElementsByTagName('table')[0];
window.alternateTableColor=函数(){
for(设i=0;i
这是JavaScript的词法范围。
您可以研究此添加的HTML代码。感谢您的点名。我添加了为表着色的其他代码。如果我重置,颜色不会返回。我重新发布了整个脚本。抱歉,我试图缩短代码,但留下了一些痕迹。谢谢,问题现在可以重现:)不幸的是,我认为这归结为键入错误。请检查您的控制台:在页面加载时,您将看到
uncaughttypeerror:无法将属性'onclick'设置为null
指向行
my$('clear-color').onclick=alternateTableColor;
。但是没有ID为
clear color
的元素;该按钮的ID为
reset color
。如果解决了这个问题,它就会按预期工作。我不认为是这样。代码更像这样:函数b()和函数c()都在a()中声明,但c()不能调用b()成功。
alternateTableColor
在OP的代码中正确地定义了范围。我的观点是,在c中它可以成功地调用b-顺序不重要。哪怕重新阅读上面的评论都是我如何理解你的问题的。也许如果你重新表述这个问题,你会得到更好的答案。我知道词汇范围是如何工作的…Which正是我提出这个问题的原因,因为它在这里不起作用。@CarolJin触发器onClick处理程序的上下文是window。但是alternateTableColor的上下文是onload处理程序的this。所以您要绑定(this)或定义window上下文