簡體   English   中英

計算機在瀏覽器中運行此javascript代碼時掛起

[英]Computer Hangs on running this javascript code in browser

我試圖用JavaScript創建一個函數進行練習,以下代碼似乎未正確執行或未在瀏覽器中按預期執行:瀏覽器一直顯示忙碌的跡象,而計算機實際上卻掛起了。有人可以幫我解決這個問題嗎? thius代碼或問題是什么:

function recluse() {
  return " It is\ncalled Data.\n\nData is made of merely bits, yet it takes complex forms. Control\nconsists only of simple instructions, yet it performs difficult\ntasks. From the small and trivial, the large and complex arise.\n\nThe program source is Data. Control arises from it. The Control\nproceeds to create new Data. The one is born from the other, the\nother is useless without the one. This is the harmonious cycle of\nData and Control.\n\nOf themselves, Data and Control are without structure. The programmers\nof old moulded their programs out of this raw substance. Over time,\nthe amorphous Data has crystallised into data types, and the chaotic\nControl was restricted into control structures and functions.\n\n%% Short Sayings\n\nWhen a student asked Fu-Tzu about the nature of the cycle of Data and\nControl, Fu-Tzu replied 'Think of a compiler, compiling itself.'\n\nA student asked 'The programmers of old used only simple machines and\nno programming languages, yet they made beautiful programs. Why do we\nuse complicated machines and programming languages?'. Fu-Tzu replied\n'The builders of old used only sticks and clay, yet they made\nbeautiful huts.'\n\nA hermit spent ten years writing a program. 'My program can compute\nthe motion of the stars on a 286-computer running MS DOS', he proudly\nannounced. 'Nobody own a 286-computer or uses MS DOS anymore.', Fu-Tzu\nresponded.\n\nFu-Tzu had written a small program that was full of global state and\ndubious shortcuts. Reading it, a student asked 'You warned us against\nthese techniques, yet I find them in your program. How can this be?'\nFu-Tzu said 'There is no need to fetch water hose when the house is\nnot on fire.'{This is not to be read as an encouragement of sloppy\nprogramming, but rather as a warning against neurotic adherence to\nrules of thumb.}\n\n%% Wisdom\n\nA student was complaining about digital numbers. 'When I take the root\nof two and then square it again, the result is already inaccurate!'.\nOverhearing him, Fu-Tzu laughed. 'Here is a sheet of paper. Write down\nthe precise value of the square root of two for me.'\n\nFu-Tzu said 'When you cut against the grain of the wood, much strength\nis needed. When you program against the grain of a problem, much code\nis needed.'\n\nTzu-li and Tzu-ssu were boasting about the size of their latest\nprograms. 'Two-hundred thousand lines', said Tzu-li, 'not counting\ncomments!'. 'Psah', said Tzu-ssu, 'mine is almost a *million* lines\nalready.' Fu-Tzu said 'My best program has five hundred lines.'\nHearing this, Tzu-li and Tzu-ssu were enlightened.\n\nA student had been sitting motionless behind his computer for hours,\nfrowning darkly. He was trying to write a beautiful solution to a\ndifficult problem, but could not find the right approach. Fu-Tzu hit\nhim on the back of his head and shouted '*Type something!*' The student\nstarted writing an ugly solution. After he had finished, he suddenly\nunderstood the beautiful solution.\n\n%% Progression\n\nA beginning programmer writes his programs like an ant builds her\nhill, one piece at a time, without thought for the bigger structure.\nHis programs will be like loose sand. They may stand for a while, but\ngrowing too big they fall apart{Referring to the danger of internal\ninconsistency and duplicated structure in unorganised code.}.\n\nRealising this problem, the programmer will start to spend a lot of\ntime thinking about structure. His programs will be rigidly\nstructured";
}

var para=recluse().split("\n\n");
function reduce(func,length,array)
{
    array.forEach(function(c)
                           {
                               length=func(length,c);
                           });
    return length;
}

<!---TOP LEVEL FUNCTION FOR PROCESSING A VALUE WITH A FUNCTION AND CREATING  AN ARRAY OF TH RESULTS------------>

function map(func,array)
{
    var result_array=[];

    array.forEach(function(c)
                           {
                               result_array.push(func(c));
                           });
   return result_array;
}

<!-------------THE ALGORITHM FOR FINDING THE EMPHASISED TEXT AND THE FOOTNOTES WITHIN THE TEXT---->

function fragmenter(text)
{
                var fragments=[];

                function indexing(char)
                {
                    var index=text.indexOf(char);
                    if(index==-1)
                    {
                        return text.length;
                    }
                    else
                    return index;
                }

                function ifAtStart(char)
                {
                    var end=(char,1);
                       if(end==-1)
                       {
                           throw Error("No enclosing "+char);
                       }
                    var part=text.slice(1,end);
                    text=text.slice(end+1);
                    return part;
                }

                function normalText(text)
                {
                    var end=reduce(Math.min,text.length,map(indexing,["*","{"]));//to check that the index is within the text only
                    var part=text.slice(0,end);
                    var text=text.slice(end);
                    return part;
                }

                while(text!="")        <!---4------> 
                {
                    if(text.charAt(0)=="*")
                    {
                        fragments.push({type:"emphasised",
                                       content:isAtFirst("*")});
                    }
                    else if(text.charAt(0)=="{")
                    {
                        fragments.push({type:"footnotes",
                                       content:isAtFirst("}")});
                    }
                    else
                    {
                        fragments.push({type:"Normal",
                                       content:normalText(text)});
                    }
                }
return fragments;               
}

console.log(fragmenter(para[1]));

那里 :

while(text!="")
{
     // some code that doesn't change "text"
}

循環中無法更改文本,因此您的代碼無法完成。

如果您要遍歷字符,則可以執行以下操作:

for (var i=0; i<text.length; i++) {
     if (text.charAt(i)=="*")

但是我想知道您是否錯過了這樣的事實,當您調用normalText(text)normalText函數不能更改其具有的變量,而只能更改其自身的變量。 您必須共享文本。 一個解決方案是這樣的:

 function normalText() // REMOVED text SO IT USES THE ONE OF THE ENCLOSING SCOPE
            {
                var end=reduce(Math.min,text.length,map(indexing,["*","{"]));//to check that the index is within the text only
                var part=text.slice(0,end);
                var text=text.slice(end);
                return part;
            }

 while(text!="")        
            {
                if(text.charAt(0)=="*")
                {
                    fragments.push({type:"emphasised",
                                   content:isAtFirst("*")});
                }
                else if(text.charAt(0)=="{")
                {
                    fragments.push({type:"footnotes",
                                   content:isAtFirst("}")});
                }
                else
                {
                    fragments.push({type:"Normal",
                       content:normalText()}); // REMOVED PASSING TEXT
                }
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM