一、function概述
javascript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的。通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递。
函数对象与其他用户所定义的对象有着本质的区别,这一类对象被称之为内部对象。内置对象的构造器是由JavaScript本身所定义的。
二、function对象的创建
在JavaScript中,函数对象对应的类型是Function,可以通过new Function()来创建一个函数对象,也可以通过function关键字来创建一个对象。
//使用new Function()方式创建
var myFunction=new Function("a","b","return a+b");
//使用function关键字创建
function myFunction(a,b) {
return a + b;
}
用关键字创建对象的时候,在解释器内部,就会自动构造一个Function对象,将函数作为一个内部的对象来存储和运行。从这里也可以看到,一个函数对象名称(函数变量)和一个普通变量名称具有同样的规范,都可以通过变量名来引用这个变量,但是函数变量名后面可以跟上括号和参数列表来进行函数调用。
new Function()的语法规范如下:
var funcName=new Function(p1,p2,...,pn,body);
参数的类型都是字符串,p1到pn表示所创建函数的参数名称列表,body表示所创建函数的函数体语句,funcName就是所创建函数的名称。可以不指定任何参数创建一个空函数,不指定funcName创建一个匿名函数。
需要注意的是,p1到pn是参数名称的列表,即p1不仅能代表一个参数,它也可以是一个逗号隔开的参数列表,例如下面的定义是等价的:
new Function("a", "b", "c", "return a+b+c")
new Function("a, b, c", "return a+b+c")
new Function("a,b", "c", "return a+b+c")
函数的本质是一个内部对象,由JavaScript解释器决定其运行方式。并且可直接在函数声明后面加上括号就表示创建完成后立即进行函数调用,例如:
var i=function (a,b){
return a+b;
}(1,2);
alert(i);
这段代码会显示变量i的值等于3。i是表示返回的值,而不是创建的函数,因为括号“(”比等号“=”有更高的优先级。
三、匿名函数和有名函数的区别
匿名函数必须先定义后调用,有名函数可以先调用,后定义。
A)匿名(这段语句将产生func未定义的错误)
<script>
func();
var func = function() {
alert(1);
}
</script>
B)有名(输出1)
<script>
func();
function func() {
alert(1);
}
</script>
这是因为JS解释器是分段分析执行的。并且,在同一段中,有名函数会优先被分析。并且同名函数后面的覆盖前面的。
而且,下面这段代码也是合法的:
<script>
function myfunc ()
{
alert("hello");
};
myfunc(); //这里调用myfunc,输出yeah而不是hello
function myfunc ()
{
alert("yeah");
};
myfunc(); //这里调用myfunc,输出yeah
</script>
如果要让上述代码的第一次调用输出“hello”,可以将它们分为两段:
<script>
function myfunc ()
{
alert("hello");
};
myfunc(); //这里调用myfunc,输出hello
</script>
<script>
function myfunc ()
{
alert("yeah");
};
myfunc(); //这里调用myfunc,输出yeah
</script>
下面的代码输出“hello”
<script>
function myfunc ()
{
alert("hello");
};
</script>
<script>
myfunc(); //输出“hello”
</script>
<script>
function myfunc ()
{
alert("yeah");
};
</script>
下面的代码输出“yeah”
<script>
function myfunc ()
{
alert("hello");
};
</script>
<script>
function myfunc ()
{
alert("yeah");
};
</script>
<script>
myfunc(); //输出“yeah”
</script>
从上面对段的位置变化导致输出变化很清楚的解释了JS解释器分段分析执行的本质。
相关推荐
【KETTLE教材】JS内嵌方法: 详细介绍kettle中使用javascript时内嵌的function
javascript两种function的定义方式function a(){}和a=function(){}具体使用如下,感兴趣的朋友可以参考下,希望对你对你学习function的定义有所帮助
对MulLine.js的使用做了一些详细的说明,有需要学习的话可以下载哦
我最近看到很多javascript代码,看起来我错了.在这种情况下,我应该建议哪种更好的代码模式?我将重现我所看到的代码和每个代码的简短说明: 代码块#1 该代码不应该评估内部函数.程序员会因为代码应该运行而感到困惑. ...
BaseJs = function() { // 判断浏览器类型 userAgent = navigator.userAgent.toLowerCase(); check = function(r) { return r.test(userAgent); }; isOpera = check(/opera/); isIE = !isOpera && check...
// 列描述对象 ,包含一个数组,数组中每一个对象说明一个列编辑对象和相关处理 column : [ { name : 'year', // 选择型 editorType : 'select', // 加载select数据url,返回json数据,格式应为:[{...
天气预报gif动图 带JS对应图标解析说明 /// /// 天气描述转图标 /// /// <param name="phen"></param> /// <returns></returns> function GetYBgif(phen) { var ico = "02.gif";//默认多云图标 ...
//参数说明:要检查的字符串 //返回值:0:不是 1:是 function chkemail(a) { var i=a.length; var temp = a.indexOf('@'); var tempd = a.indexOf('.'); if (temp > 1) { if ((i-temp) > 3){ if ((i-tempd...
引入 匿名函数 闭包 变量作用域 函数外部访问函数内部的局部变量 用闭包实现私有成员 引入 闭包是用匿名函数来实现。...这是 JavaScript 的一大特色,将在后面说明。 把这两个因素结合在一起,就能
说明 encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码:”:”、”/”、”;” 和 “?”。请使用 encodeURIComponent 方法对...
此文档主要讲的是js的使用,查询语句,function的各种函数参数功能
/* function CheckData(valname,val,valimode,limitlen) */ /* 功能说明:验证字符串数据 */ /* function CheckUserName(val,min,max) */ /* 功能说明:验证用户名 */ /* function CheckPassWord(val,min,max) *...
/* function CheckData(valname,val,valimode,limitlen) */ /* 功能说明:验证字符串数据 */ /* function CheckUserName(val,min,max) */ /* 功能说明:验证用户名 */ /* function CheckPassWord(val,min,max) *...
RainyxDate 1.0 一个获取日期(公历、农历)的js小插件 一、用法: 1、引入: [removed][removed] ... 2、无法读秒,这个在js调用中加入一个计数器就可以了,用jQuery还是比较容易实现的,没更多说明了
参数说明 listLoadingMore({id:"",id2:function(){},action:function(){},pageNum:10,getNew:undefined,funcArg:undefined,func:function(){},loadingMustTime:0,loadingDom:function(){},loadedDom:function(){},...
plugins\piwigo-videojs\include\function_sync2.php 文件中加入set_time_limit(0);语句 后台插件-LocalFiles Editor-设置-本地配置中需要加入一下参数 $conf['sync_chars_regex'] = '/^[a-zA-Z0-9-_.\x00-\xff]+$/'...
49.引用一个文件式的JS:<script type="text/javascript" src="aaa.js"> 50.指定在不支持脚本的浏览器显示的HTML:<noscript></noscript> 51.当超链和ONCLICK事件都有时,则老版本的浏览器转向a.html,否则转向b.html.例...
接口调用说明 所有接口通过wx对象(也可使用jWeixin对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数: success:接口调用成功时执行的回调函数。 fail:接口调用失败时执行的...
1、call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用...