为什么函数参数需要这么长时间才能加载

Why does function parameter take so long to load?

本文关键字:长时间 加载 函数 参数 为什么      更新时间:2023-09-26

这就是我的Javascript的样子:

function open_box(message){
    var box_content = '<div id="overlay"><div id="box_frame"><div id="box">'+message+'<a href="javascript:reset_frame()"><div id="xbutton"><img src="elements/xbutton.png"></div></a></div></div></div>';
    document.getElementById('functioner').innerHTML = box_content;
    open_box('Why hello there');
}

当我在我的 JS 文件中填写"为什么你好"参数时,它会像 HTML 中一样打印。对于所有意图和目的,该函数都有效。唯一的问题是加载需要相当长的时间。有时我的浏览器要求停止操作。谁能向我解释为什么会这样?是否有任何潜在的优化途径?

编辑:我明白你们关于递归的观点。回过头来看,这是有道理的。这让我想到了另一个问题。

当直接移动到函数外部时,我的 HTML 不会确认我的"为什么你好"参数。要调用它的代码只是一个简单的<a href="javascript:open_box()">

我仍在尝试调用JS代码,因此请原谅新手错误。

你陷入了无限递归。 当第一次调用open_box时,其中的最后一个语句是调用open_box本身,这种情况无限发生。所以,要修复它,请更改

function open_box(message){
    var box_content = '<div id="overlay"><div id="box_frame"><div id="box">'+message+'<a href="javascript:reset_frame()"><div id="xbutton"><img src="elements/xbutton.png"></div></a></div></div></div>';
    document.getElementById('functioner').innerHTML = box_content;
    open_box('Why hello there');
}

function open_box(message){
    var box_content = '<div id="overlay"><div id="box_frame"><div id="box">'+message+'<a href="javascript:reset_frame()"><div id="xbutton"><img src="elements/xbutton.png"></div></a></div></div></div>';
    document.getElementById('functioner').innerHTML = box_content;
}
open_box('Why hello there');

这是因为递归,函数一遍又一遍地调用自己

每次函数调用其自身时,它都会更改 DOM,然后再次调用其自身,最终导致堆栈溢出错误。

open_box('Why hello there');移动到函数的外侧,如下所示:

function open_box(message){
    var box_content = '<div id="overlay"><div id="box_frame"><div id="box">'+message+'<a href="javascript:reset_frame()"><div id="xbutton"><img src="elements/xbutton.png"></div></a></div></div></div>';
    document.getElementById('functioner').innerHTML = box_content;
}
//Moved to outside the function
open_box('Why hello there');

有关递归的更多信息:http://en.wikipedia.org/wiki/Recursion

此外,如果您查看控制台

(F12,然后在chrome中查看控制台),您应该看到以下内容: 超出最大调用堆栈大小错误