Javascript [Electronic resources] : The Definitive Guide (4th Edition) نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Javascript [Electronic resources] : The Definitive Guide (4th Edition) - نسخه متنی

David Flanagan

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید


11.5 The Function( ) Constructor and Function Literals




Chapter 7, there are two ways to define functions other
than the basic function statement. As of
JavaScript 1.1, functions can be defined using the Function(
) constructor, and in JavaScript 1.2 and
later, they can be defined with function literals. You should be
aware of some important differences between these two techniques.

First, the Function( ) constructor allows
JavaScript code to be dynamically created and compiled at runtime.
Function literals, however, are a static part of program structure,
just as function statements are.

Second, as a corollary of the first difference, the
Function( ) constructor parses the function body
and creates a new function object each time it is called. If the call
to the constructor appears within a loop or within a frequently
called function, this process can be inefficient. On the other hand,
a function literal or nested function that appears within a loop or
function is not recompiled each time it is encountered. Nor is a
different function object created each time a function literal is
encountered. (Although, as noted earlier, a new closure may be
required to capture differences in the lexical scope in which the
function is defined.)

The third difference between the Function( )
constructor and function literals is that functions created with the
Function( ) constructor do not use
lexical scoping; instead, they are
always compiled as if they were top-level functions, as the following
code demonstrates:

var y = "global";
function constructFunction( ) {
var y = "local";
return new Function("return y"); // Does not capture the local scope!
}
// This line displays "global", because the function returned by the
// Function( ) constructor does not use the local scope. Had a function
// literal been used instead, this line would have displayed "local".
alert(constructFunction()( )); // Displays "global"


/ 844