重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
/*第一种方法,使用function语句,格式如下*/brfunction fn(){bralert("这是使用function语句进行函数定义");br }brfn();brbr/*第二种方法,使用function()构造函数克隆函数*/brvar f = new function("a","b","alert(a+b)");br f(a,b);br其实相当于如下代码:brfunction f(a,b){bralert(a+b);br }br/*第三种方法,使用函数直接量*/brvar zhenn = function(){bralert("zhenn");br }br zhenn();
成都创新互联主营白银网站建设的网络公司,主营网站建设方案,app开发定制,白银h5微信小程序开发搭建,白银网站营销推广欢迎白银等地区企业咨询
html
head
meta http-equiv="Content-Type" content="text/html; charset=gb2312"
title无标题文档/title
script language="javascript"
function iframeChange(iframeName){
document.frames[iframeName].height=document.frames[iframeName].document.body.scrollHeight;
}
/script
/head
body
iframe name="diary_page" src="2.html" scrolling="no" width="50" height="10" onload="javascript:iframeChange('diary_page');"/iframe
/body
/html
或者
html
head
meta http-equiv="Content-Type" content="text/html; charset=gb2312"
title无标题文档/title
script language="javascript"
function iframeChange(frm){
frm.height=frm.document.body.scrollHeight;
}
/script
/head
body
iframe name="diary_page" src="2.html" scrolling="no" width="50" height="10" onload="javascript:iframeChange(this);"/iframe
/body
/html
[img]/*第一种方法,使用function语句,格式如下*/
function fn(){
alert("这是使用function语句进行函数定义");
}
fn();
/*第二种方法,使用Function()构造函数克隆函数*/
var F = new Function("a","b","alert(a+b)");
F(a,b);
其实相当于如下代码:
function F(a,b){
alert(a+b);
}
/*第三种方法,使用函数直接量*/
var zhenn = function(){
alert("zhenn");
}
zhenn();
语法结构:
function 函数名(参数列表){
函数体;
return 返回值
}
注意事项:
1、函数名不能以数字开头,要符合js的命名规范
2、参数列表只需指明参数个数,无需指定类型,因为js是弱类型
3、如果有返回值,写return,如果没有,不写return即可
例如:
//例1:定义无参无返回值函数
function myfun(){
alert("这是一个无参无返回值的函数");
}
//例2:定义有参无返回值函数
function myfun2(name,age){
alert("姓名:"+name+"\n年龄:"+age);
}
//例3:定义有参有返回值函数
function myfun3(one,two){
return one+two;
}
区别在于,functionOne的是一条表达式语句,只有程序执行到这行函数才会被定义。然而functionTwo是函数声明,它会在JavaScript一开始就被定义。
如下两个例子可以看出它们的区别。
函数表达式:
// 是个错误的函数调用,functionOne没有被定义。
functionOne();
//程序执行到这里functionOne才会被定义。
var functionOne = function() {
console.log("Hello!");
};
函数声明:
//functionTow会输出: "Hello!"
functionTwo();
function functionTwo() {
console.log("Hello!");
}
通过对上面例子的理解。我们可以推断出,如下的函数声明是不合理的。
if (test) {
//错误或不好的风格
function functionThree() { doSomething(); }
}
这里在if语句中声明了函数,其实它的声明不会管test的值是多少,都会被定义,这样的风格并不好。如果你在use strict下编写上述代码,那么将会报错。秒秒学上有不少函数相关的例子,你可以去看看。
1:调用关键字function来构造
function distance(x1,x2,y1,y2)
{
var dx=x2-x1;
var dy=y2-y1;
return Math.sqrt(dx*dx+dy*dy);
}
2:使用Function()构造函数(请注意与上面的大小写)
var f=new Function*"x","y","return x*y");
这行代码创建了一个新函数,该函数和你所熟悉的语法定义的函数基本上时等价的:
function f(x,y)
{
return x*y;
}
Functino()构造函数可以接受任意多个字符串参数。它的最后一个参数时函数的主体,其中可以包含任何JavaScript语句,语句之间用分号分隔。其他的参数都是用来说明函数要定义的形式参数名的字符串。如果你定义的函数没有参数,那么可以只需给构造函数传递一个字符串(即函数的主体)即可。
注意,传递给构造函数Function()的参数中没有一个用于说明它要创建的函数名。用Function()构造函数创建的未命名函数有时被成为“匿名函数”。
你可能非常想知道Function()构造函数的用途是什么。为什么不能只用function语句来定义所有的函数呢?原因是Function()构造函数允许我们动态地建立和编译一个函数,它不会将我们限制在function语句预编译的函数体中。这样做带来的负面影响效应就是每次调用一个函数时,Function()构造函数都要对它进行编译。因此,在循环体中或者在经常使用的函数中,我们不应该频繁地调用这个构造函数。
使用Function()构造函数的另一个原因是它能够将函数定义为JavaScript表达式的一部分,而不是将其定义一个语句,这种情况下使用它就显得比较的方面,甚至可以说精致。
3:函数直接量
函数直接量是一个表达式,它可以定义匿名函数。函数直接量的语法和function语句非常相似,只不过它被用作表达式,而不是用作语句,而且也无需指定函数名。下面的三行代码分别使用function()语句、Funciont()构造函数和函数直接量定义了三个基本上相同的函数:
function f(x){return x*x};
var f=new Function("x","return x*x;");
var f=function(x){reurn x*x};
在JavaScript1.1中,可以使用构造函数Function()来定义函数,在JavaScript1.2和其后的版本中,还可以使用函数直接量来构造函数。你应该注意这两种方法之间的重要差别。
首先,构造函数Function()允许在运行时动态地创建和编译JavaScript代码。但是函数直接量却是函数结构的一个静态部分,就像function语句一样。
其次,作为第一个差别的必然结果,每次调用构造函数Function()时都会解析函数体并且创建一个新东汉数对象。如果对构造函数的调用出现在一个循环中,或者出现在一个经常被调用的函数中,这种方法的效率非常低。另一个方面,函数直接量或出现在循环和函数中的嵌套函数不是在每次调用时都被重新编译,而且每当遇到一个函数直接量时也不创建一个新的函数对象。
Function()构造函数和函数之间量之间的第三点差别是,使用构造函数Function()创建的函数不使用词法作用域,相反的,它们总是被当作顶级函数来编译,就像下面代码所说明的那样: