引言:
插入点是相对于紧随其后的字符的位置,它不是输入流中的绝对偏移量。
这是什么意思?为什么不是绝对偏移量?
在上下文中:
插入点用于从
document.write
API 插入数据。
所以规格有以下引号:
让旧插入点与当前插入点具有相同的值。让插入点位于下一个输入字符之前。
如果第一次相遇,则插入点不确定。
让插入点具有旧插入点的值。 (换句话说,将插入点恢复到之前的值。该值可能是“未定义”值。)
该步骤在准备脚本元素之后进行,这可能会导致调用
document.write
因此,如果输入流的时间丢弃第一个字符,则不清楚插入点的概念是什么(如果它始终是流的开头)。
有什么想法吗?
插入点始终位于输入流的头部,这显然是不正确的。考虑这个 HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example</title>
</head>
<body>
Hello
<script>
document.write('<script>document.write("Mary, ")<\/script>Sally, ');
document.write('John, ');
</script>and team ...
</body>
</html>
因此,当输入流遇到脚本结束标记并开始执行脚本时,输入流中的下一个字符是:(每个字符之间有空格,因为插入点位于之间字符。)
a n d t e a m . . .
⮴insertion point
然后当第一个 document.write() 执行时,输入流就变成了
< s c r i p t > d o c u m e n t . w r i t e ( " M a r y , " ) < / s c r i p t > S a l l y , a n d t e a m . . .
⮴insertion point
然后解析器可重入执行并开始消耗输入流直到插入点。
这个重新进入的解析器然后遇到内部脚本结束标记,此时输入流是
S a l l y , a n d t e a m . . .
⮴insertion point
那么当这个脚本执行时,输入流就变成了
S a l l y , J o h n , a n d t e a m . . .
⮴insertion point
然后解析器可重入执行并开始消耗输入流直到插入点,此时输入流变为
a n d t e a m . . .
⮴insertion point
再次,重新进入的解析器退出,原始解析器流程可以继续。
因此,您还应该能够看到,从指定的角度来看,定义相对于后面的字符的插入点比尝试在整个过程中跟踪绝对偏移量要简单得多。