函数定义
函数是由这样的方式进行声明的:关键字 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 };//函数直接量
示例:spa
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。code
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,你好!
函数名只是指向函数的变量,那么能够把函数做为参数传递给另外一个函数吗?答案是能够的,请看: blog
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()());