C语言中惰性,js高级技巧之惰性载入函数

在函数执行的时候在处理函数,在函数第一次调用的过程中,该函数会被重写覆盖成另一个按照合适方式执行的函数,下面见例子:创建XHR function createXHR () {

if (typeof XMLHttpRequest != 'undefined') {

return new XMLHttpRequest();

} else if (typeof ActiveXObject != 'undefined') {

if (typeof arguments.callee.activeXString != 'string'){

var version = ['MSXML2.XMLHttp.6.3', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp'],

i,len;

for (i = 0,len=version.length; i < len; i++) {

try {

new ActiveXObject(version[i]);

arguments.callee.activeXString = versions[i];

break;

} catch (ex) {

// 跳过

}

}

}

return new ActiveXObject(arguments.callee.activeXString);

} else {

throw new Error('NO XHR');

}

} 每次执行这个创建函数都会去执行内部的那些判断语句,所以见如下改写该函数,重写原函数,下一次调用时就会直接调用分配好的函数 function createXHR () {

if (typeof XMLHttpRequest != 'undefined') {

// 改写原函数

createXHR = function () {

return new XMLHttpRequest();

}

} else if (typeof ActiveXObject != 'undefined') {

// 改写原函数

createXHR = function () {

if (typeof arguments.callee.activeXString != 'string'){

var version = ['MSXML2.XMLHttp.6.3', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp'],

i,len;

for (i = 0,len=version.length; i < len; i++) {

try {

new ActiveXObject(version[i]);

arguments.callee.activeXString = versions[i];

break;

} catch (ex) {

// 跳过

}

}

}

return new ActiveXObject(arguments.callee.activeXString);

}

} else {

createXHR = function () {

throw new Error('NO XHR');

}

}

// 最后返回预期

return createXHR();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值