理解javascript函数

函数定义:命名函数(声明式),匿名函数(引用式)

function dwn(str) {
	document.write(str + "<br/>");
}
// 声明式,定义代码先于函数执行代码被解析
function t1() {
	dwn("t1");
}
t1();
function t1() {
	dwn("new t1");
};
t1();
// 引用式,在函数运行中进行动态解析
var t1 = function() {
	dwn("new new t1");
};
t1();
var t1 = function() {
	dwn("new new new t1");
};
t1();
// 以上输出:new t1,new t1,new new t1,new new new t1
        你可能会认为输出t1,new t1,new newt1,new new new t1,结果却并不是这样,应该理解这句话:声明式,定义代码先于函数执行代码被解析。如果深入一步,应该说是scope链问题,实际上前面两个方法等价于window.t1,可以理解为t1是window的一个公有属性,被赋了两次值,以最后一次赋值为最终值。

      当第四个方法改成function t1(){}这样的声明式时,结果变成了new new new t1,new new new t1,new new t1,new new t1,最后一个输出就难以理解了。

另外匿名函数还有(function(){...})()这样的写法,最后一个括号用于参数输入。
还有
var t1=new function(){..}这样的声明,实际上t1已经是一个对象了。

var t2 = new function() {
	var temp = 100; // 私有成员
	this.temp = 500; // 公有成员
	return temp + this.temp;
};
alert(typeof(t2)); // object
alert(t2.constructor()); // 600

使用系统内置函数对象来构建一个函数:
var obj = new Function('var temp = 100;this.temp = 200;return temp + this.temp;');
alert(typeof(obj)); // function
alert(obj()); // 300
但是不建议上面的构建方式


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值