JS特殊函数(Function()构造函数、函数直接量)区别介绍

函数定义 
函数是由这样的方式进行声明的:关键字 function、函数名、一组参数,以及置于括号中的待执行代码。 
函数的构造语法有这三种:

1.function functionName(arg0, arg1, ... argN) { statements }//function语句
2.var function_name = new Function(arg1, arg2, ..., argN, function_body);//Function()构造函数
3.var func = function(arg0, arg1, ... argN) { statements };//函数直接量 

示例:

function f(x){return x*x};//function语句
var f = new Function("x","return x*x;");//Function()构造函数
var f = function(x){return x*x;};//函数直接量 

如果函数无明确的返回值,或调用了没有参数的 return 语句,那么它真正返回的值是 undefined。

Function()构造函数

函数实际上是功能完整的对象 。Function类可以表示开发者定义的任何函数。用Function类直接创建函数的语法如下: 
var function_name = new function(arg1, arg2, ..., argN, function_body) 
在上面的形式中,每个 arg 都是一个参数,最后一个参数是函数主体(要执行的代码)。这些参数必须是字符串。 
var sayHi = new Function("sName", "sMessage", "alert(‘Hello ‘ + sName + sMessage);"); 
sayHi("jzj,", "你好!");//Hello jzj,你好! 
函数名只是指向函数的变量,那么可以把函数作为参数传递给另一个函数吗?答案是可以的,请看:

function callAnotherFunc(fnFunction, vArgument) {
fnFunction(vArgument);
}
var doAdd = new Function("iNum", "alert(iNum + 10)");
callAnotherFunc(doAdd, 10); //输出 "20" 

注意:尽管可以使用 Function 构造函数创建函数,但最好不要使用它,因为用它定义函数比用传统方式要慢得多。不过,所有函数都应看作 Function 类的实例 。 
如果你定义的函数没有参数,那么可以只需给构造函数传递一个字符串(即函数的主体)即可。 
注意:传递给构造函数Function()的参数中没有一个用于说明它要创建的函数名。用Function()构造函数创建的未命名函数有时被称为“匿名函数”。 
Function()函数允许我们动态地建立和编译一个函数,它不会将我们限制在function语句预编译的函数体中。

Function()构造函数和函数直接量差别 
Function()构造函数和函数直接量之间的差别有一点就是:使用构造函数Function()创建的函数不使用词法作用域,相反的,它们总是被顶级函数来编译,如:

var y = "global";
function constructFunction() {
var y = "local";
//Function()构造函数
return new Function("return y;");//不使用局部作用域
}
function constFunction() {
var y = "local";
//函数直接量
var f = function () {
return y;//使用局部作用域
};
return f;
}
//显示 global,因为Function()构造函数返回的函数并不使用局部作用域
alert(constructFunction()());
//显示 lobal,因为函数直接量返回的函数并使用局部作用域
alert(constFunction()()); 
时间: 2024-08-04 23:09:38

JS特殊函数(Function()构造函数、函数直接量)区别介绍的相关文章

js中自执行函数(function(){})()和(function(){}())区别

方式一,调用函数,得到返回值.强制函数直接量执行再返回一个引用,引用在去调用执行方式二,调用函数,得到返回值.强制运算符使函数调用执行(function(){})(); 是 把函数当作表达式解析,然后执行解析后的函数相当于 var a = function(){}; a(); a得到的是函数(function(){}()); 是把函数表达式和执行当作语句直接执行.相当于 var a = function(){}(); a得到的是结果最终结果是一样的.()只是起了 自执行的作用和 () 一样的还有

JQuery之JQuery的版本 JQuery入门 属性获取 JQuery就绪函数 JS文档就绪函数和JQuery文档就绪函数的区别 JS对象和JQuery对象的区别 关于$的使用 多个JS库的冲突解决方案

JQuery的版本 JQuery入门 属性获取 JQuery就绪函数 JS文档就绪函数和JQuery文档就绪函数的区别 JS对象和JQuery对象的区别 关于$的使用 多个JS库的冲突解决方案 JQuery的版本 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery的版本</title> <

js函数表达式和函数声明的区别

我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function foo() { // <-- 添加这一行 var a = 3; console.log( a ); // 3 } // <-- 以及这一行 foo(); // <-- 以及这一行 console.log( a ); // 2 虽然这种技术可以解决一些问题,但是它并不理想,因为会导致一些额外的

js两种定义函数、继承方式及区别

一:js两种定义函数的方式及区别 1:函数声明: function sayA() { alert("i am A"); } 2:函数表达式: var sayB = function() { alert("i am B"); } 区别:code 前者会在代码执行之前提前加载到作用域中,后者则是在代码执行到那一行的时候才会有定义 二:js两种继承方式及区别 对象冒充 临时属性 call() apply() 原型链 code 继承应选哪种 code 三:实例 js两种定义

js function定义函数使用心得

js function定义函数使用心得,了解这个才能更进一步的了解js面向对象方面的知识. 1.最基本的作为一个本本分分的函数声明使用. 代码如下: function func(){} 或 var func=function(){}; 2.作为一个类构造器使用: 代码如下: function class(){} class.prototype={}; var item=new class(); 3.作为闭包使用: 代码如下: (function(){ //独立作用域 })(); 4.可以作为选择

Function Declaration(函数声明)和函数表达式的区别

前言 在ECMAScript中,有两个最常用的创建函数对象的方法,即使用函数表达式或者使用函数声明.对此,ECMAScript规范明确了一点,即是,即函数声明 必须始终带有一个标识符(Identifier),也就是我们所说的函数名,而函数表达式则可以省略.下面看看这两者的详细区别介绍. 什么是 Function Declaration(函数声明)? Function Declaration 可以定义命名的函数变量,而无需给变量赋值.Function Declaration 是一种独立的结构,不能

JS中函数表达式与函数声明的区别

hello,沐晴又来更新啦,今天呢,跟大家讲讲让人头疼的函数表达式和函数声明,反正我当初看那本高级程序的时候,是没怎么看太透,哈哈.我是个比较重基础的人,跟我一起探讨函数表达式和函数声明的世界吧. 首先呢,先看看他们的颜值:   函数声明:function 函数名(){}   函数表达式:function 函数名(可写可不写)(){}; (不写名叫做匿名函数表达式.写名叫做命名函数表达式.推荐用匿名的.) 这么一看长的好像没啥区别,反正颜值也都不高.那么我们如何区别是函数表达式还是函数声明呢?答

原生js的Function,Array,Object构造函数的prototype原型方法扩展

在js中,Function构造函数的实例化对象为Function,Array,Object构造函数. <script> Function.prototype.addMethod = function (name,fn) { this.prototype[name]=fn; } Array.addMethod('test',function(){ console.log('Array method add'); }); Object.addMethod('test',function(){ co

JavaScript 函数声明与函数表达式的区别 函数声明提升(function declaration hoisting)

解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁.解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问).至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真的被解释执行.例子: alert (sum(10,10)); function sum (num1, num2) { return num1 + num2; } 以上代码完全可以正常运行.因为在代码开始执行之前,解析器就已经通过一一个名为函数声明提升(function declaration hoist