-
Notifications
You must be signed in to change notification settings - Fork 24
Expand file tree
/
Copy pathC.html
More file actions
executable file
·103 lines (95 loc) · 15.8 KB
/
C.html
File metadata and controls
executable file
·103 lines (95 loc) · 15.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<!DOCTYPE html>
<html class="split chapter"><head>
<meta charset="utf-8"><title>Приложение C (информационное) Строгий вариант языка ECMAScript # Ⓣ Ⓔ ① Ⓐ — ES5 с аннотациями</title><link rel="stylesheet" href="style.css"><link href="B.html" title="Приложение В (информационное) Совместимость " rel="prev">
<link href="index.html" title="Содержание" rel="index">
<link href="D.html" title="Приложение D (информационное) Исправления и пояснения в 5-й редакции и возможное влияние на совместимость с 3-й редакцией " rel="next">
</head><body><div class="head">
<h2 id="top">Спецификация ECMAScript 5.1 с аннотациями <span id="timestamp"></span></h2>
<!--left..-->
<div id="slogan">
<div id="share-toggler">Поделиться</div>
<div class="share">
<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://es5.javascript.ru/" data-lang="ru" data-size="large" data-count="horizontal">Твитнуть</a>
<div id="fb-root"></div>
<div style="margin-bottom:5px" class="fb-like" data-href="http://es5.javascript.ru" data-send="false" data-action="recommend" data-layout="button_count" data-width="300" data-show-faces="false" data-font="arial"></div>
<div class="vk-share-wrapper">
<script src="http://vkontakte.ru/js/api/share.js?9" charset="windows-1251"></script>
<script src="misc.js"></script>
</div>
<div style="margin-top:6px">
<g:plusone annotation="inline" href="http://es5.javascript.ru/" width="120" size="standard" style="vertical-align:middle"></g:plusone>
</div>
</div>
</div>
<!--..left-->
<div id="annotations">
</div>
</div>
<nav><a href="B.html">← Приложение В (информационное) Совместимость </a> – <a href="index.html" class="toc-nav">Содержание</a> – <a href="D.html">Приложение D (информационное) Исправления и пояснения в 5-й редакции и возможное влияние на совместимость с 3-й редакцией →</a></nav>
<h2 id="C">Приложение C (информационное) Строгий вариант языка ECMAScript <a href="#C">#</a> <a href="#C-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h2>
<p>
<strong>Ограничения и исключения строгого режима</strong></p>
<ul><li>В коде в строгом режиме идентификаторы "<code><b>implements</b></code>", "<code><b>interface</b></code>", "<code><b>let</b></code>", "<code><b>package</b></code>", "<code><b>private</b></code>", "<code><b>protected</b></code>", "<code><b>public</b></code>", "<code><b>static</b></code>" и "<code><b>yield</b></code>" классифицируются как токены <i>FutureReservedWord</i>. (<a>7.6.12</a> [?]<!-- FIXME -->).</li>
<li><p>
В корректной реализации при обработке программы в <a href="x10.html#x10.1.1" class="term-ref">строгом режиме</a> синтаксис для <I>NumericLiteral </I>(<a href="x7.html#x7.8.3">7.8.3</a>) не может распространяться на <i>OctalIntegerLiteral</i>, определение которого содержится в <a href="B.html#B.1.1">B.1.1</a>.</p>
</li>
<li><p>
В корректной реализации при обработке программы в <a href="x10.html#x10.1.1" class="term-ref">строгом режиме</a> (см. <a href="x10.html#x10.1.1">пункт 10.1.1</a>) синтаксис для <i>EscapeSequence</i> не может распространяться на <i>OctalEscapeSequence</i>, определение которой содержится в <a href="B.html#B.1.2">B.1.2</a>.</p>
</li>
<li><p>
Присваивание необъявленному идентификатору или иная <a href="x8.html#IsUnresolvableReference">неразрешимая ссылка</a> не создают свойство <a href="x15.1.html#x15.1" class="term-ref">глобального объекта</a>. Если присваивание имеет место в рамках <a href="x10.html#x10.1.1" class="term-ref">кода в строгом режиме</a>, его <i>LeftHandSide</i> <tt>Левая сторона</tt> при вычислении не должна производить неразрешимую ссылку. Если это происходит, при таком присваивании генерируется исключение <b><a href="x15.11.html#x15.11.6.3" class="term-ref">ReferenceError</a></b> (<a href="x8.html#x8.7.2">8.7.2</a>). Кроме того, <i>LeftHandSide</i> не может быть ссылкой на свойство данных со значением атрибута {[[Writable]]:<b>false</b>}, на свойство аксессоров со значением атрибута {[[Set]]:<b>undefined</b>}, а также на несуществующее свойство объекта, у которого внутреннее свойство [[Extensible]] имеет значение <b>false</b>. Если это происходит, генерируется исключение <b><a href="x15.11.html#x15.11.6.5" class="term-ref">TypeError</a></b> (<a href="x11.html#x11.13.1">11.13.1</a>).</p>
</li>
<li><p>
Идентификатор <code><b>eval</b></code> или <code><b>arguments</b></code> не может использоваться в качестве левостороннего выражения <i>LeftHandSideExpression</i> оператора присваивания (<a href="x11.html#x11.13">11.13</a>) или постфиксного выражения <i>PostfixExpression</i> (<a href="x11.html#x11.3">11.3</a>), или в качестве унарного выражения <i>UnaryExpression</i>, управляемого префиксным оператором инкремента (<a href="x11.html#x11.4.4">11.4.4</a>) или префиксным оператором декремента (<a href="x11.html#x11.4.5">11.4.5</a>).
</p>
</li>
<li><p>
Объекты аргументов для функций в строгом режиме определяют неконфигурируемые свойства аксессора, называемые "<code><b>caller</b></code>" и "<code><b>callee</b></code>", которые при доступе генерируют исключение <b><a href="x15.11.html#x15.11.6.5" class="term-ref">TypeError</a></b>.</p>
</li>
<li><p>
Объекты аргументов для функций в строгом режиме не разделяют динамически свои значения свойств индекса массива с соответствующими привязками формальных параметров их функций. (<a href="x10.html#x10.6">10.6</a>).</p>
</li>
<li><p>
Если объект аргументов создаётся в функции в строгом режиме, то привязка локального идентификатора <code><b>arguments</b></code> к объекту аргументов является неизменяемой и поэтому не может являться целью выражения присваивания. (<a href="x10.html#x10.5">10.5</a>).</p>
</li>
<li><p>
Если <a href="x10.html#x10.1.1" class="term-ref">код в строгом режиме</a> содержит <i>ObjectLiteral</i> более чем с одним определением свойства данных, генерируется <b><a href="x15.11.html#x15.11.6.4" class="term-ref">SyntaxError</a></b> (<a href="x11.html#x11.1.5">11.1.5</a>).</p>
</li>
<li><p>
Если <i>Identifier</i> <code><b>"eval"</b></code> или <i>Identifier </i><code><b>"arguments"</b></code> встречается как <i>Identifier</i> в <i>PropertySetParameterList</i><code></code> для <i>PropertyAssignment</i>, который содержится в <a href="x10.html#x10.1.1">строгом коде</a>, или если его <i><a href="x13.html#x13">FunctionBody</a></i> представляет собой <a href="x10.html#x10.1.1">строгий код</a>, то генерируется исключение <b><a href="x15.11.html#x15.11.6.4" class="term-ref">SyntaxError</a> (<a href="x11.html#x11.1.5">11.1.5</a>).</b></p>
</li>
<li><p>
<a href="x10.html#eval-code">Eval-код</a> в строгом режиме не может <a href="x10.html#x10.5">инстанциировать переменные или функции</a> в окружении переменных вызывающего контекста, вызвавшего eval. Вместо этого создаётся новое окружение переменных, которое используется для инстанциирования привязки объявлений для <a href="x10.html#eval-code">eval-кода</a> (<a href="x10.html#x10.4.2">10.4.2</a>).</p>
</li>
<li><p>
Если значение <b>this</b> вычисляется в рамках <a href="x10.html#x10.1.1" class="term-ref">кода в строгом режиме</a>, то это значение <b>this</b> не приводится к объекту. Значение <b>this</b> для <b>null</b> или <b>undefined</b> не преобразовывается к <a href="x15.1.html#x15.1" class="term-ref">глобальному объекту</a>, а <a href="x4.html#primitive_value" class="term-ref">примитивные значения</a> не преобразовываются к объектам wrapper. Значение <b>this</b>, передаваемое посредством вызова функции (включая вызовы посредством <code><b><a href="x15.3.html#x15.3.4.3">Function.prototype.apply</a></b></code> и <code><b><a href="x15.3.html#x15.3.4.4">Function.prototype.call</a></b></code><b>)</b> не преобразовывают передаваемое значение this к объекту (<a href="x10.html#x10.4.3">10.4.3</a>, <a href="x11.html#x11.1.1">11.1.1</a>, <a href="x15.3.html#x15.3.4.3">15.3.4.3</a>, <a href="x15.3.html#x15.3.4.4">15.3.4.4</a>).</p>
</li>
<li><p>
Если оператор <code><b>delete</b></code> встречается в рамках <a href="x10.html#x10.1.1" class="term-ref">кода в строгом режиме</a>, генерируется исключение <b><a href="x15.11.html#x15.11.6.4" class="term-ref">SyntaxError</a></b>, если его <i>UnaryExpression</i> является прямой ссылкой на переменную, аргумент функции или имя функции (<a href="x11.html#x11.4.1">11.4.1</a>).</p>
</li>
<li><p>
Если оператор <code><b>delete</b></code> встречается в рамках <a href="x10.html#x10.1.1" class="term-ref">кода в строгом режиме</a>, генерируется исключение <b><a href="x15.11.html#x15.11.6.5" class="term-ref">TypeError</a></b>, если удаляемое свойство имеет атрибут { [[Configurable]]:<b>false</b> } (<a href="x11.html#x11.4.1">11.4.1</a>).</p>
</li>
<li><p>
Если <i>VariableDeclaration</i> или <i>VariableDeclarationNoIn</i> встречается в <a href="x10.html#x10.1.1">коде в строгом режиме</a>, и при этом его идентификатор <i>Identifier</i> представляет собой либо <code><b>eval</b></code>, либо <b><code><b>arguments</b></code></b>, генерируется исключение <b><a href="x15.11.html#x15.11.6.4" class="term-ref">SyntaxError</a></b> (<a href="x12.html#x12.2.1">12.2.1</a>).</p>
</li>
<li><p>
Код в строгом режиме не может содержать <I>WithStatement </I><tt>инструкцию with</tt>. Наличие <i>WithStatement</i> в контексте строгого режима является синтаксической ошибкой <b><a href="x15.11.html#x15.11.6.4" class="term-ref">SyntaxError</a></b> (<a href="x12.html#x12.10">12.10</a>).</p>
</li>
<li><p>
Если <I>TryStatement </I>вместе с <I>Catch </I>встречается в <a href="x10.html#x10.1.1">коде в строгом режиме</a>, и при этом <I>Identifier </I>для <I>Catch </I>представляет собой либо <code><b>eval</b></code>, либо <code><b>arguments</b></code>, генерируется исключение <b><a href="x15.11.html#x15.11.6.4" class="term-ref">SyntaxError</a></b> (<a href="x12.html#x12.14.1">12.14.1</a>).</p>
</li>
<li><p>
Если идентификатор <code><b>eval</b></code> или <code><b>arguments</b></code> встречается в рамках <i>FormalParameterList</i> для <i>FunctionDeclaration</i> или <i>FunctionExpression</i> в строгом режиме, генерируется исключение <b><a href="x15.11.html#x15.11.6.4" class="term-ref">SyntaxError</a></b> (<a href="x13.html#x13.1">13.1</a>).</p>
</li>
<li><p>
Функция в строгом режиме не может иметь два или более формальных параметров в одинаковым именем. При попытке создать такую функцию с использованием <i>FunctionDeclaration</i>, <i>FunctionExpression</i> или конструктора <code><b>Function</b></code> генерируется исключение <b><a href="x15.11.html#x15.11.6.4" class="term-ref">SyntaxError</a></b> (<a href="x13.html#x13.1">13.1</a>, <a href="x15.3.html#x15.3.2">15.3.2</a>).</p>
</li>
<li><p>
Реализация не может расширять заданные в настоящей спецификации
значения в рамках функции в строгом режиме свойств <code><b>caller</b></code> или
<code><b>arguments</b></code> для экземпляров функции. В объектах функций, соответствующих функциям в строгом режиме, код на ECMAScript не может создавать или изменять свойства с этими именами (<a href="x10.html#x10.6">10.6</a>, <a href="x13.html#x13.2">13.2</a>, <a href="x15.3.html#x15.3.4.5.3">15.3.4.5.3</a>).</p>
</li>
<li><p>
При использовании в <a href="x10.html#x10.1.1" class="term-ref">коде в строгом режиме</a> идентификаторов <code><b>eval</b></code> или <code><b>arguments</b></code> в качестве <i>Identifier</i> для <i>FunctionDeclaration</i> или для <i>FunctionExpression</i> или в качестве формального имени параметра генерируется исключение <b><a href="x15.11.html#x15.11.6.4" class="term-ref">SyntaxError</a></b> (<a href="x13.html#x13.1">13.1</a>). При попытке динамического определения такой функции в строгом режиме с помощью конструктора <code><b>Function</b></code> (<a href="x15.3.html#x15.3.2">15.3.2</a>) будет сгенерировано исключение <b><a href="x15.11.html#x15.11.6.4" class="term-ref">SyntaxError</a></b>.</p>
</li></ul></body><script src="anno.js"></script></html>