mozilla

Сравнить версии

Functions

Change Revisions

Ревизия 267009:

Версия 267009 пользователя Knyaz Vladimir, сделанная

Ревизия 267010:

Версия 267010 пользователя drygunin, сделанная

Заголовок:
Functions
Functions
Slug:
Ядро_JavaScript_1.5_Спровчник/Functions
Ядро_JavaScript_1.5_Спровчник/Functions
Содержимое:

Ревизия 267009
Ревизия 267010
nn7    <p>
8      &nbsp;
9    </p>
n11      Generally speaking, a function is a "subprogram" that can bn14      Generally speaking, a function is a "subprogram" that can b
>e <i>called</i> by code external (or internal in the case of recu>e <em>called</em> by code external (or internal in the case of re
>rsion) to the function. Like the program itself, a function is co>cursion) to the function. Like the program itself, a function is 
>mposed of a sequence of statements called the <i>function body</i>composed of a sequence of statements called the <em>function body
>>. Objects and values can be <i>passed</i> to a function, and the></em>. Objects and values can be <em>passed</em> to a function, a
> function can <i>return</i> an object or value.>nd the function can <em>return</em> an object or value.
12    </p>
13    <p>15    </p>
16    <p>
14      In JavaScript, functions are first-class objects, i.e. they17      In JavaScript, functions are first-class objects, i.e. they
> are objects and can be manipulated and passed around like just l> are objects and can be manipulated and passed around like just l
>ike any other object. Specifically, they are <code><a href="ru/Co>ike any other object. Specifically, they are <code><a href="/ru/C
>re_JavaScript_1.5_Reference/Global_Objects/Function">Function</a>>ore_JavaScript_1.5_Reference/Global_Objects/Function" title="ru/C
></code> objects.>ore_JavaScript_1.5_Reference/Global_Objects/Function">Function</a
 >></code> objects.
n20      Every function in JavaScript is actually a <code>Function</n23      Каждая функция в JavaScript на самом деле является объектом
>code> object. See <code><a href="ru/Core_JavaScript_1.5_Reference> типа <code>Function</code>. See <code><a href="/ru/Core_JavaScri
>/Global_Objects/Function">Function</a></code> for information on >pt_1.5_Reference/Global_Objects/Function" title="ru/Core_JavaScri
>properties and methods of <code>Function</code> objects.>pt_1.5_Reference/Global_Objects/Function">Function</a></code> for
 > information on properties and methods of <code>Function</code> o
 >bjects.
21    </p>
22    <p>24    </p>
23      To return a value, the function must have a <code><a href="
>ru/Core_JavaScript_1.5_Reference/Statements/return">return</a></c 
>ode> statement that specifies the value to return. A function tha 
>t does not return a value returns <code>undefined</code>. 
24    </p>25    <p>
26      Чтобы вернуть значение, функция должна иметь оператор <code
 >><a href="/ru/Core_JavaScript_1.5_Reference/Statements/return" ti
 >tle="ru/Core_JavaScript_1.5_Reference/Statements/return">return</
 >a></code>, который определяет возвращаемое значение. Функция, не 
 >имеющая определённого возвращаемого значения, возвращает <code>un
 >defined</code>.
25    <p>27    </p>
28    <p>
26      Non-object parameters, e.g. strings, numbers and booleans, 29      Non-object parameters, e.g. strings, numbers and booleans, 
>are passed to functions <i>by value</i>; the value is passed to t>are passed to functions <em>by value</em>; the value is passed to
>he function where it is stored in a new variable. If the function> the function where it is stored in a new variable. If the functi
> changes the value of the variable, this change is not reflected >on changes the value of the variable, this change is not reflecte
>globally or in the calling function. Object parameters, e.g. obje>d globally or in the calling function. Object parameters, e.g. ob
>cts, arrays and regular expressions, are passed to functions <i>b>jects, arrays and regular expressions, are passed to functions <e
>y reference</i>; if you pass an object as a parameter to a functi>m>by reference</em>; if you pass an object as a parameter to a fu
>on and the function changes the object's properties, that change >nction and the function changes the object's properties, that cha
>is visible outside the function, as shown in the following exampl>nge is visible outside the function, as shown in the following ex
>e:>ample:
n40      The <code>this</code> keyword does not refer to the currentn43      The <code>this</code> keyword does not refer to the current
>ly executing function, so you must refer to <code>Function</code>>ly executing function, so you must refer to <code>Function</code>
> objects by name, even within the function body. Alternatively, y> objects by name, even within the function body. Alternatively, y
>ou can use the <a href="ru/Core_JavaScript_1.5_Reference/Function>ou can use the <a href="/ru/Core_JavaScript_1.5_Reference/Functio
>s/arguments/callee">arguments.callee</a> property.>ns/arguments/callee" title="ru/Core_JavaScript_1.5_Reference/Func
 >tions/arguments/callee">arguments.callee</a> property.
n52      There is a special syntax for declaring functions (see <a hn55      There is a special syntax for declaring functions (see <a h
>ref="ru/Core_JavaScript_1.5_Reference/Statements/function">functi>ref="/ru/Core_JavaScript_1.5_Reference/Statements/function" title
>on statement</a> for details):>="ru/Core_JavaScript_1.5_Reference/Statements/function">function 
 >statement</a> for details):
n55function <i>name</i>([<i>param</i>[, <i>param</i>[, ... <i>param<n58function <em>name</em>([<em>param</em>[, <em>param</em>[, ... <em
>/i>]]]) {>>param</em>]]]) {
56   <i>statements</i>59   <em>statements</em>
n61        <code>name</code>&nbsp;n64        <code>name</code>
n69        <code>param</code>&nbsp;n72        <code>param</code>
n77        <code>statements</code>&nbsp;n80        <code>statements</code>
n87      A function expression is similar to and has the same syntaxn90      A function expression is similar to and has the same syntax
> as a function declaration (see <a href="ru/Core_JavaScript_1.5_R> as a function declaration (see <a href="/ru/Core_JavaScript_1.5_
>eference/Operators/Special_Operators/function_Operator">function >Reference/Operators/Special_Operators/function_Operator" title="r
>operator</a> for details):>u/Core_JavaScript_1.5_Reference/Operators/Special_Operators/funct
 >ion_Operator">function operator</a> for details):
n90function [<i>name</i>]([<i>param</i>] [, <i>param</i>] [..., <i>pn93function [<em>name</em>]([<em>param</em>] [, <em>param</em>] [...
>aram</i>]) {>, <em>param</em>]) {
91   <i>statements</i>94   <em>statements</em>
n96        <code>name</code>&nbsp;n99        <code>name</code>
n104        <code>param</code>&nbsp;n107        <code>param</code>
n112        <code>statements</code>&nbsp;n115        <code>statements</code>
n125new Function ([<i>arg1</i>[, <i>arg2</i>[, ... <i>argN</i>]],] <in128new Function ([<em>arg1</em>[, <em>arg2</em>[, ... <em>argN</em>]
>>functionBody</i>)>],] <em>functionBody</em>)
n129        <code>arg1, arg2, ... arg<i>N</i></code>&nbsp;n132        <code>arg1, arg2, ... arg<em>N</em></code>
n137        <code>functionBody</code>&nbsp;n140        <code>functionBody</code>
n150      You can refer to a function's arguments within the functionn153      You can refer to a function's arguments within the function
> by using the <code>arguments</code> object. See <a href="ru/Core> by using the <code>arguments</code> object. See <a href="/ru/Cor
>_JavaScript_1.5_Reference/Functions/arguments">arguments</a>.>e_JavaScript_1.5_Reference/Functions/arguments" title="ru/Core_Ja
 >vaScript_1.5_Reference/Functions/arguments">arguments</a>.
n168        <code><a href="ru/Core_JavaScript_1.5_Reference/Functionsn171        <code><a href="/ru/Core_JavaScript_1.5_Reference/Function
>/arguments/callee">arguments.callee</a></code>>s/arguments/callee" title="ru/Core_JavaScript_1.5_Reference/Funct
 >ions/arguments/callee">arguments.callee</a></code>
n196      A function that calls itself is called a <i>recursive functn199      A function that calls itself is called a <em>recursive func
>ion</i>. In some ways, recursion is analogous to a loop. Both exe>tion</em>. In some ways, recursion is analogous to a loop. Both e
>cute the same code multiple times, and both require a condition (>xecute the same code multiple times, and both require a condition
>to avoid an infinite loop, or rather, infinite recursion in this > (to avoid an infinite loop, or rather, infinite recursion in thi
>case). For example, the following loop:>s case). For example, the following loop:
n218      However, some algorithms cannot be simple iterative loops. n221      However, some algorithms cannot be simple iterative loops. 
>For example, getting all the nodes of a tree structure (e.g. the >For example, getting all the nodes of a tree structure (e.g. the 
><a href="ru/DOM">DOM</a>) is more easily done using recursion:><a href="/ru/DOM" title="ru/DOM">DOM</a>) is more easily done usi
 >ng recursion:
n266      You can nest a function within a function. The nested (innen269      You can nest a function within a function. The nested (inne
>r) function is private to its containing (outer) function. It als>r) function is private to its containing (outer) function. It als
>o forms a <i>closure</i>.>o forms a <em>closure</em>.
n272    </dl><a class="external" href="http://jibbering.com/faq/faq_nn275    </dl>
>otes/closures.html"></a> 
n345      Functions can be multiply-nested, i.e. a function (A) contan348      Functions can be multiply-nested, i.e. a function (A) conta
>ining a function (B) containing a function (C). Both functions B >ining a function (B) containing a function (C). Both functions B 
>and C form closures here, so B can access A and C can access B. I>and C form closures here, so B can access A and C can access B. I
>n addition, since C can access B which can access A, C can also a>n addition, since C can access B which can access A, C can also a
>ccess A. Thus, the closures can contain multiple scopes; they rec>ccess A. Thus, the closures can contain multiple scopes; they rec
>ursively contain the scope of the functions containing it. This i>ursively contain the scope of the functions containing it. This i
>s called <i>scope chaining</i>. (Why it is called "chaining" will>s called <em>scope chaining</em>. (Why it is called "chaining" wi
> be explained later.)>ll be explained later.)
n372      <li>Because <code>B</code>'s closure includes <code>A</coden375      <li>Because <code>B</code>'s closure includes <code>A</code
>>, <code>C</code>'s closure includes <code>A</code>, <code>C</cod>>, <code>C</code>'s closure includes <code>A</code>, <code>C</cod
>e> can access both <code>B</code> <i>and</i> <code>A</code>'s arg>e> can access both <code>B</code> <em>and</em> <code>A</code>'s a
>uments and variables. In other words, <code>C</code> <i>chains</i>rguments and variables. In other words, <code>C</code> <em>chains
>> the scopes of <code>B</code> and <code>A</code> in that order.></em> the scopes of <code>B</code> and <code>A</code> in that ord
 >er.
n382      When two arguments or variables in the scopes of a closure n385      When two arguments or variables in the scopes of a closure 
>have the same name, there is a <i>name conflict</i>. More inner s>have the same name, there is a <em>name conflict</em>. More inner
>copes take precedence, so the inner-most scope takes the highest > scopes take precedence, so the inner-most scope takes the highes
>precedence, while the outer-most scope takes the lowest. This is >t precedence, while the outer-most scope takes the lowest. This i
>the scope chain. The first on the chain is the inner-most scope, >s the scope chain. The first on the chain is the inner-most scope
>and the last is the outer-most scope. Consider the following:>, and the last is the outer-most scope. Consider the following:
n409      <li>a <i>function declaration</i> of a function named <coden412      <li>a <em>function declaration</em> of a function named <co
>>multiply</code>>de>multiply</code>
n416      <li>a <i>function expression</i> of an anonymous function an419      <li>a <em>function expression</em> of an anonymous function
>ssigned to the variable <code>multiply</code>> assigned to the variable <code>multiply</code>
n435      <li style="list-style: none">n438      <li>There is a distinction between the function name and th
 >e variable the function is assigned to:
436        <a class="external" href="http://jibbering.com/faq/faq_no
>tes/closures.html"></a> 
437      </li>
438      <li>
439        <a class="external" href="http://jibbering.com/faq/faq_no
>tes/closures.html">There is a distinction between the function na 
>me and the variable the function is assigned to:</a> 
n441          <li style="list-style: none">n
442            <a class="external" href="http://jibbering.com/faq/fa
>q_notes/closures.html"></a> 
443          </li>
n446          <li>n442          <li>The function name can be used only within the funct
 >ion's body. Attempting to use it outside the function's body resu
 >lts in an error (or <code>undefined</code> if the function name w
 >as previously declared via a <code>var</code> statement). For exa
 >mple:
447            <a class="external" href="http://jibbering.com/faq/fa
>q_notes/closures.html">The function name can be used only within  
>the function's body. Attempting to use it outside the function's  
>body results in an error (or <code>undefined</code> if the functi 
>on name was previously declared via a <code>var</code> statement) 
>. For example:</a> 
n453              <a class="external" href="http://jibbering.com/faq/n448              The function name also appears when the function is
>faq_notes/closures.html">The function name also appears when the > serialized via <a href="/ru/Core_JavaScript_1.5_Reference/Global
>function is serialized via</a> <a href="ru/Core_JavaScript_1.5_Re>_Objects/Function/toString" title="ru/Core_JavaScript_1.5_Referen
>ference/Global_Objects/Function/toString"><code>Function</code>'s>ce/Global_Objects/Function/toString"><code>Function</code>'s toSt
> toString method</a>.>ring method</a>.
n478      <li>A function defined by a <code>Function</code> does not n473      <li>A function defined by a <code>Function</code> does not 
>have a function name. However, in the <a href="ru/SpiderMonkey">S>have a function name. However, in the <a href="/ru/SpiderMonkey" 
>piderMonkey</a> JavaScript engine, the serialized form of the fun>title="ru/SpiderMonkey">SpiderMonkey</a> JavaScript engine, the s
>ction shows as if it has the name "anonymous". For example, <code>erialized form of the function shows as if it has the name "anony
>>alert(new Function())</code> outputs:>mous". For example, <code>alert(new Function())</code> outputs:
n588      Note: Some JavaScript engines, not including <a href="ru/Spn583      Note: Some JavaScript engines, not including <a href="/ru/S
>iderMonkey">SpiderMonkey</a>, incorrectly treat any function expr>piderMonkey" title="ru/SpiderMonkey">SpiderMonkey</a>, incorrectl
>ession with a name as a function declaration. This would lead to >y treat any function expression with a name as a function declara
><code>zero</code> being defined, even with the always-false condi>tion. This would lead to <code>zero</code> being defined, even wi
>tional. A safer way to define functions conditionally is to defin>th the always-false conditional. A safer way to define functions 
>e the function anonymously and assign it to a variable:>conditionally is to define the function anonymously and assign it
 > to a variable:
n600      In JavaScript, <a href="ru/DOM">DOM</a> event handlers are n595      In JavaScript, <a href="/ru/DOM" title="ru/DOM">DOM</a> eve
>functions (as opposed to objects containing a <code>handleEvent</>nt handlers are functions (as opposed to objects containing a <co
>code> method in other DOM language bindings). The functions are p>de>handleEvent</code> method in other DOM language bindings). The
>assed an <a href="ru/DOM/event">event</a> object as the first and> functions are passed an <a href="/ru/DOM/event" title="ru/DOM/ev
> only parameter. Like any other parameter, if the event object do>ent">event</a> object as the first and only parameter. Like any o
>es not need to be used, it can be omitted in the list of formal p>ther parameter, if the event object does not need to be used, it 
>arameters.>can be omitted in the list of formal parameters.
601    </p>
602    <p>596    </p>
597    <p>
603      Possible event targets in a <a href="ru/HTML">HTML</a> docu598      Possible event targets in a <a href="/ru/HTML" title="ru/HT
>ment include: <code>window</code> (<code>Window</code> objects, i>ML">HTML</a> document include: <code>window</code> (<code>Window<
>ncluding frames), <code>document</code> (<code>HTMLDocument</code>/code> objects, including frames), <code>document</code> (<code>H
>> objects), and elements (<code>Element</code> objects). In the <>TMLDocument</code> objects), and elements (<code>Element</code> o
>a class="external" href="http://www.w3.org/TR/DOM-Level-2-HTML/">>bjects). In the <a class="external" href="http://www.w3.org/TR/DO
>HTML DOM</a>, event targets have event handler properties. These >M-Level-2-HTML/">HTML DOM</a>, event targets have event handler p
>properties are lowercased event names prefixed with "on", e.g. <c>roperties. These properties are lowercased event names prefixed w
>ode>onfocus</code>. An alternate and more robust way of adding ev>ith "on", e.g. <code>onfocus</code>. An alternate and more robust
>ent listeners is provided by <a class="external" href="http://www> way of adding event listeners is provided by <a class="external"
>.w3.org/TR/DOM-Level-2-Events/">DOM Level 2 Events</a>.> href="http://www.w3.org/TR/DOM-Level-2-Events/">DOM Level 2 Even
 >ts</a>.
n661      A common JavaScript novice mistake is appending parenthesisn656      A common JavaScript novice mistake is appending parenthesis
> and/or parameters to the end of the variable, i.e. calling the e> and/or parameters to the end of the variable, i.e. calling the e
>vent handler when assigning it. Adding those parenthesis will ass>vent handler when assigning it. Adding those parenthesis will ass
>ign the <i>value returned from calling the event handler</i>, whi>ign the <em>value returned from calling the event handler</em>, w
>ch is often <code>undefined</code> (if the function doesn't retur>hich is often <code>undefined</code> (if the function doesn't ret
>n anything), rather than the event handler itself:>urn anything), rather than the event handler itself:
n687      <a href="ru/Core_JavaScript_1.5_Reference/Functions/argumenn682      <a href="/ru/Core_JavaScript_1.5_Reference/Functions/argume
>ts">arguments</a>: An array-like object containing the arguments >nts" title="ru/Core_JavaScript_1.5_Reference/Functions/arguments"
>passed to the currently executing function.>>arguments</a>: An array-like object containing the arguments pas
 >sed to the currently executing function.
688    </p>
689    <p>683    </p>
690      <a href="ru/Core_JavaScript_1.5_Reference/Functions/argumen
>ts/callee">arguments.callee</a>: Specifies the currently executin 
>g function. 
691    </p>684    <p>
685      <a href="/ru/Core_JavaScript_1.5_Reference/Functions/argume
 >nts/callee" title="ru/Core_JavaScript_1.5_Reference/Functions/arg
 >uments/callee">arguments.callee</a>: Specifies the currently exec
 >uting function.
692    <p>686    </p>
693      <a href="ru/Core_JavaScript_1.5_Reference/Functions/argumen
>ts/caller">arguments.caller</a>: Specifies the function that invo 
>ked the currently executing function. 
694    </p>687    <p>
688      <a href="/ru/Core_JavaScript_1.5_Reference/Functions/argume
 >nts/caller" title="ru/Core_JavaScript_1.5_Reference/Functions/arg
 >uments/caller">arguments.caller</a>: Specifies the function that 
 >invoked the currently executing function.
695    <p>689    </p>
690    <p>
696      <a href="ru/Core_JavaScript_1.5_Reference/Functions/argumen691      <a href="/ru/Core_JavaScript_1.5_Reference/Functions/argume
>ts/length">arguments.length</a>: Specifies the number of argument>nts/length" title="ru/Core_JavaScript_1.5_Reference/Functions/arg
>s passed to the function.>uments/length">arguments.length</a>: Specifies the number of argu
 >ments passed to the function.
n747      <a href="ru/Core_JavaScript_1.5_Reference/Global_Objects/Fun742      <a href="/ru/Core_JavaScript_1.5_Reference/Global_Objects/F
>nction">Function</a>, <a href="ru/Core_JavaScript_1.5_Reference/S>unction" title="ru/Core_JavaScript_1.5_Reference/Global_Objects/F
>tatements/function">function statement</a>, <a href="ru/Core_Java>unction">Function</a>, <a href="/ru/Core_JavaScript_1.5_Reference
>Script_1.5_Reference/Operators/Special_Operators/function_Operato>/Statements/function" title="ru/Core_JavaScript_1.5_Reference/Sta
>r">function operator</a>>tements/function">function statement</a>, <a href="/ru/Core_JavaS
 >cript_1.5_Reference/Operators/Special_Operators/function_Operator
 >" title="ru/Core_JavaScript_1.5_Reference/Operators/Special_Opera
 >tors/function_Operator">function operator</a>
tt746    </p>
747    <p>
751    </p>{{ languages( { "en": "en/Core_JavaScript_1.5_Reference/F748      {{ languages( { "en": "en/Core_JavaScript_1.5_Reference/Fun
>unctions", "ja": "ja/Core_JavaScript_1.5_Reference/Functions" } )>ctions", "ja": "ja/Core_JavaScript_1.5_Reference/Functions" } ) }
> }}>}
749    </p>

Вернуться в Историю