`
yunnick
  • 浏览: 390153 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript之Function和function简单区分

阅读更多

同事给发了一段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

 

 

 

 

0
1
分享到:
评论

相关推荐

    JavaScript详解(第2版)

    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 ...

    javascript学习笔记.docx

    共70页,复制两页供参考,如下: 1 JavaScript基本语法 1) 读未声明的变量会产生...但JavaScript默认的函数和构造函数会在每个窗口中拥有独立副本。 16) onload()和onunload()事件分别在网页装载完成后和卸载前执行。

    javascript两种function的定义介绍及区别说明

    一般情况下两者的调用结果是一样的,但是还是有区别的。 第一种方式: 代码如下: ...//浏览器就会按顺序alert出‘old’和‘new’ 这里就可以很明显区分两个方式的区别了。定义的顺序不同。 第一种,刚开始其实没

    初学JavaScript第一章第1/2页

    JavaScript的数据类型 Number:整形,浮点型 String:字符型数据,JavaScript不区分单个字符和字符串, 任何字符或字符串都可以用又引号或单引号引起来. Boolean:布尔型 Undefined:未定义类型,用于不存在或者没有被赋初值...

    JavaScript中的细节分析

    JavaScript区分大小写:在JavaScript中变量、函数都是区分大小写的,例如: 代码如下: function myfunction(){}和 function myFunction(){}不同 JavaScript中核心对象Array、Object等也是区分大小写。 单引号和双...

    JavaScript每天必学之基础知识

    解释的时候会编译function和var这两个关键词定义的变量,编译完成后从上往下执行并向变量赋值。  区分大小写  ECMASCript中的一切(包括变量,函数名和操作符)都区分大小写。  1. 变量  变量在第一次用到时...

    JavaScript笔记

    JavaScript:定义行为和动作 (基于对象和事件驱动的客户端脚本语言;也是一种广泛应用于客户端Web开发的脚本语言) 基于对象:网页中的一切元素都是假象!不需要new,即可直接使用 事件驱动:JavaScript的执行都是...

    Javascript笔记一 js以及json基础使用说明

    注意:以上单词都是小写的,不要和Number, String, Object, Function等JavaScript内置函数混淆,JavaScript语言是区分大小写。typeof(null)返回object,但null并非object。 JavaScript的代码就只有function一种形式...

    理解JavaScript变量作用域更轻松

    JavaScript本身作为一门简单的语言,就其变量作用域问题一样令不少人头晕,这主要是因为JavaScript闭包的存在。本文不打算深入讲解JavaScript变量作用域问题(其实本人也没有能力能把这一话题讲的深入些),也不讲...

    cox-tagwire:TagWire是一个Javascript库,可以帮助您在Javascript对象和HTML标签之间进行数据绑定

    _ :这是区分通用类和TagWire的分隔符。 {variable name} :要使用的值的变量名。 - :用于分隔变量名和函数名的分隔符。 {tail function} :使用数据的属性或用户定义的函数。 它被称为尾部功能。 附加信息 ...

    JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同

    函数表达式和函数声明 在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,两者期间的区别是有点晕,因为ECMA规范只明确了一点:函数声明必须带有标示...ECMAScript是通过上下文来区分的,如果functio

    简单理解JavaScript中的封装与继承特性

    封装简单地说就是让外界只能访问对象的共有变量和函数,隐藏细节和数据。 js中有三种方法创建对象,分别为门户大开型、用命名规范区分私有变量、闭包创建真正的私有变量三种。 1.门户大开型,是实现对象的最基础的...

    autodiff.js:JavaScript 的正向和反向模式自动区分

    使用运算符重写的概念验证正向和反向模式自动分化。 目前要求函数是纯函数,只有对 Math 库函数的外部调用。 function xcubed ( x ) { return Math . pow ( x , 3 ) ; } var dxcubed = AutoDiff . instrument ( ...

    JavaScript中判断整数的多种方法总结

    JavaScript中不区分整数和浮点数,所有数字内部都采用64位浮点格式表示,和Java的double类型一样。但实际操作中比如数组索引、位操作则是基于32位整数。 方式一、使用取余运算符判断 任何整数都会被1整除,即余数是0...

    JavaScript知识点总结之如何提高性能

    JavaScript的性能问题不容小觑,这就需要我们开发人员在编写JavaScript程序时多注意一些细节,本文非常详细的介绍了一下JavaScript性能优化方面的知识点,绝对是干货。 先给大家巩固下javascript基本语法: ...

    JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结

    1、数据类型:JavaScript定义的数据类型有字符串、数字、布尔、数组、对象、Null、Undefined,但typeof有区分可判别的数据分类是number、string、boolean、object(null / array)、function和undefined。undefined 这...

    javascript 面向对象编程基础 多态

    重载:由于Javascript是弱类型的语言,而且又支持可变参数,当我们定义重载方法的时候,解释器无法通过参数类型和参数个数来区分不同的重载方法,因此方法重载是不被支持的!当先后定义了同名的方法的时候,后定义...

    javascript模拟命名空间

    在 C++ 和 C# 中,命名空间...如果要创建一个 JavaScript 库,则可以将它们包装在命名空间内,而不需要定义全局函数和类,如下所示: var MSDNMagNS = {}; MSDNMagNS.Pet = function(name) { // code here }; MSDNMa

    java关于字符串拼接的笔试题-[removed]JavaScript

    最大的优点之一是它的非阻塞特性,或者说它是一种异步语言。 //JavaScript 使用事件循环来处理异步函数调用。 当程序运行时,会调用函数并将其添加到堆栈中。 发出需要等待服务器响应的请求的函数然后被发送到一个...

Global site tag (gtag.js) - Google Analytics