How does TeX break paragraphs into lines when there is only two element in a pararaph?

The horizontal skip sticks to the next thing because there is no way for TeX to break the line here. There is no space following the skip because any space here is consumed by the processing.

If you take #2 out of the \hbox, you'll see that only the first word disappears and the rest goes to the next line because now you have a space allowing a line break.

Likewise, if you change 300cm to 0cm, you'll see that HelloWorld ... is typeset and not Hello World ....

\def\tp#1#2{#1\hskip 300cm minus 300cm\hbox{#2}}
\tp{Hello}{World it is}

\def\tp#1#2{#1\hskip 300cm \hbox{#2}}
\tp{Hello}{World it is}

\def\tp#1#2{#1\hskip 300cm #2}
\tp{Hello}{World it is}

\def\tp#1#2{#1\hskip 0cm \hbox{#2}}
\tp{Hello}{World it is}
\bye

examples of stickiness

EDIT

If you add something like \showlists and adapt the text slightly

\def\tp#1#2{#1\hskip 300cm minus 300cm\hbox{#2}}
\showlists
\tp{Hi}{World it is}

\def\tp#1#2{#1\hskip 300cm \hbox{#2}}
\showlists
\tp{He}{World it is}

\def\tp#1#2{#1\hskip 0cm \hbox{#2}}
\showlists
\tp{Ho}{World it is}
\showlists

\bye

[I'm not sure you need to keep saying \showlists if you don't want the compilation to stop.]

you can get a better idea what's happening:

### vertical mode entered at line 0
prevdepth ignored


! OK.
l.8 \showlists

? 

### vertical mode entered at line 0
### current page:
\glue(\topskip) 3.05556
\hbox(6.94444+0.0)x469.75499, glue set - 0.954
.\hbox(0.0+0.0)x20.0
.\tenrm H
.\tenrm i
.\glue 8535.82677 minus 8535.82677
.\hbox(6.94444+0.0)x46.75008
..\tenrm W
..\kern-0.83334
..\tenrm o
..\tenrm r
..\tenrm l
..etc.
.etc.
total height 10.0
 goal height 643.20255
prevdepth 0.0, prevgraf 1 line

! OK.
l.12 \showlists

? 

Overfull \hbox (8144.76631pt too wide) in paragraph at lines 13--14
[]\tenrm He [] |

\hbox(6.94444+0.0)x469.75499
.\hbox(0.0+0.0)x20.0
.\tenrm H
.\tenrm e
.\glue 8535.82677
.\hbox(6.94444+0.0)x46.75008
..\tenrm W
..\kern-0.83334
..\tenrm o
..\tenrm r
..\tenrm l
..etc.
.etc.


### vertical mode entered at line 0
### current page:
\glue(\topskip) 3.05556
\hbox(6.94444+0.0)x469.75499, glue set - 0.954
.\hbox(0.0+0.0)x20.0
.\tenrm H
.\tenrm i
.\glue 8535.82677 minus 8535.82677
.\hbox(6.94444+0.0)x46.75008
..\tenrm W
..\kern-0.83334
..\tenrm o
..\tenrm r
..\tenrm l
..etc.
.etc.
\glue(\parskip) 0.0 plus 1.0
\glue(\baselineskip) 5.05556
\hbox(6.94444+0.0)x469.75499
.\hbox(0.0+0.0)x20.0
.\tenrm H
.\tenrm e
.\glue 8535.82677
.\hbox(6.94444+0.0)x46.75008
..\tenrm W
..\kern-0.83334
..\tenrm o
..\tenrm r
..\tenrm l
..etc.
.etc.
total height 22.0 plus 1.0
 goal height 643.20255
prevdepth 0.0, prevgraf 1 line

! OK.
l.16 \showlists

For the last case (which I isolated by removing the others), I get

### horizontal mode entered at line 8
\hbox(0.0+0.0)x20.0
\tenrm H
\tenrm o
\glue 0.0
\hbox(6.94444+0.0)x46.75008
.\tenrm W
.\kern-0.83334
.\tenrm o
.\tenrm r
.\tenrm l
.etc.
etc.
spacefactor 1000
### vertical mode entered at line 0
prevdepth ignored

I think that it does not treat HoWorld as a single world. It is that the \hskip eats up any following glue, including an interword space. A space between words is, after all, just glue. But I'm by no means sure of this.


For example, in the first case, naturally I thought TeX would break the World it is part to the second line since the normal width of the glue is much larger than the page width.

Since the glue has no stretch or shrink component 300cm is not the "normal width" it is its fixed width.

the only break point in

#1\hskip 300cm \hbox{#2}

is before the skip (as #1 is the unbreakable Hello and anyway the first word of a paragraph does not break).

If it broke here the glue would be discarded at the beginning of the next line so the first line would just have an indentation box, Hello and \rightskip glue (which is 0pt) as such it would be massively underfull and so this is not a feasible breakpoint.

In the version with minus 300cm no break point needs to be taken as it can all be shrunk on to one line.