同事给发了一段JS代码,是关于函数定义方式的,如下面所示:
var a = new Function("document.write('a')");
var b = function(){document.write('b');}
function c(){
document.write('c');
}
a();
b();
c();
执行后结果为:abc
后两种定义方式较常用,其中变量'b'是指向匿名函数的一个引用,'c'是一个被赋予了函数体的函数。
对第一种方式,在查询了若干资料后做一个小结。
Function 是Javascript的內置对象,而function(注意大小写)就是从它派生出来的,Function是一种引用类型(Functions are, of course, reference types.)。个人推测类似于第2种匿名函数的引用。
Function实例构造方式:
var instanceName = new Function([arg1 [, arg2 [, ...]] ,] body);
前几项为参数,最后为函数体,如:
var myAdd = new Function("x", "y", "return x + y");
var sum = myAdd(17, 34);
执行后sum的值为51。
Function()构造函数允许我们动态地创建和编译一个函数,它不会将我们限制在function语句预编译的函数体中。这样做带来的负面影响效应就是每次调用一个函数时,Function()构造函数都要对它进行编译。因此,在循环体中或者在经常使用的函数中,我们不应该频繁地调用这个构造函数。
匿名函数与Function()构造函数用法相似;不同的是匿名函数在使用时只被解析一次,而作为字符串传递给Function()构造函数的 JavaScript代码则在每次调用构造函数时都要被解析和编译一次。
还有一点值得注意的是,变量的作用域,Function()构造函数变量作用域是全局的。
例如:
var y="global";
function constructFunction()
{
var y="local";
var fun = new Function("alert(y);");//不捕捉局部作用域。
fun();
}
constructFunction();
弹出提示框是:global
参考:http://blog.csdn.net/rosten/archive/2010/03/07/5353694.aspx
http://www.pjhome.net/article.asp?id=625
分享到:
相关推荐
1.8 JavaScript和事件 9 1.9 标准化JavaScript和W3C 11 1.9.1 JavaScript对象 12 1.9.2 文档对象模型 12 1.10 关于浏览器 13 1.10.1 JavaScript的版本 14 1.10.2 你的浏览器遵循标准吗 16 1.10.3 ...
共70页,复制两页供参考,如下: 1 JavaScript基本语法 1) 读未声明的变量会产生...但JavaScript默认的函数和构造函数会在每个窗口中拥有独立副本。 16) onload()和onunload()事件分别在网页装载完成后和卸载前执行。
一般情况下两者的调用结果是一样的,但是还是有区别的。 第一种方式: 代码如下: ...//浏览器就会按顺序alert出‘old’和‘new’ 这里就可以很明显区分两个方式的区别了。定义的顺序不同。 第一种,刚开始其实没
JavaScript的数据类型 Number:整形,浮点型 String:字符型数据,JavaScript不区分单个字符和字符串, 任何字符或字符串都可以用又引号或单引号引起来. Boolean:布尔型 Undefined:未定义类型,用于不存在或者没有被赋初值...
JavaScript区分大小写:在JavaScript中变量、函数都是区分大小写的,例如: 代码如下: function myfunction(){}和 function myFunction(){}不同 JavaScript中核心对象Array、Object等也是区分大小写。 单引号和双...
解释的时候会编译function和var这两个关键词定义的变量,编译完成后从上往下执行并向变量赋值。 区分大小写 ECMASCript中的一切(包括变量,函数名和操作符)都区分大小写。 1. 变量 变量在第一次用到时...
JavaScript:定义行为和动作 (基于对象和事件驱动的客户端脚本语言;也是一种广泛应用于客户端Web开发的脚本语言) 基于对象:网页中的一切元素都是假象!不需要new,即可直接使用 事件驱动:JavaScript的执行都是...
注意:以上单词都是小写的,不要和Number, String, Object, Function等JavaScript内置函数混淆,JavaScript语言是区分大小写。typeof(null)返回object,但null并非object。 JavaScript的代码就只有function一种形式...
JavaScript本身作为一门简单的语言,就其变量作用域问题一样令不少人头晕,这主要是因为JavaScript闭包的存在。本文不打算深入讲解JavaScript变量作用域问题(其实本人也没有能力能把这一话题讲的深入些),也不讲...
_ :这是区分通用类和TagWire的分隔符。 {variable name} :要使用的值的变量名。 - :用于分隔变量名和函数名的分隔符。 {tail function} :使用数据的属性或用户定义的函数。 它被称为尾部功能。 附加信息 ...
函数表达式和函数声明 在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,两者期间的区别是有点晕,因为ECMA规范只明确了一点:函数声明必须带有标示...ECMAScript是通过上下文来区分的,如果functio
封装简单地说就是让外界只能访问对象的共有变量和函数,隐藏细节和数据。 js中有三种方法创建对象,分别为门户大开型、用命名规范区分私有变量、闭包创建真正的私有变量三种。 1.门户大开型,是实现对象的最基础的...
使用运算符重写的概念验证正向和反向模式自动分化。 目前要求函数是纯函数,只有对 Math 库函数的外部调用。 function xcubed ( x ) { return Math . pow ( x , 3 ) ; } var dxcubed = AutoDiff . instrument ( ...
JavaScript中不区分整数和浮点数,所有数字内部都采用64位浮点格式表示,和Java的double类型一样。但实际操作中比如数组索引、位操作则是基于32位整数。 方式一、使用取余运算符判断 任何整数都会被1整除,即余数是0...
JavaScript的性能问题不容小觑,这就需要我们开发人员在编写JavaScript程序时多注意一些细节,本文非常详细的介绍了一下JavaScript性能优化方面的知识点,绝对是干货。 先给大家巩固下javascript基本语法: ...
1、数据类型:JavaScript定义的数据类型有字符串、数字、布尔、数组、对象、Null、Undefined,但typeof有区分可判别的数据分类是number、string、boolean、object(null / array)、function和undefined。undefined 这...
重载:由于Javascript是弱类型的语言,而且又支持可变参数,当我们定义重载方法的时候,解释器无法通过参数类型和参数个数来区分不同的重载方法,因此方法重载是不被支持的!当先后定义了同名的方法的时候,后定义...
在 C++ 和 C# 中,命名空间...如果要创建一个 JavaScript 库,则可以将它们包装在命名空间内,而不需要定义全局函数和类,如下所示: var MSDNMagNS = {}; MSDNMagNS.Pet = function(name) { // code here }; MSDNMa
最大的优点之一是它的非阻塞特性,或者说它是一种异步语言。 //JavaScript 使用事件循环来处理异步函数调用。 当程序运行时,会调用函数并将其添加到堆栈中。 发出需要等待服务器响应的请求的函数然后被发送到一个...