JavaScript高级函数

一、JavaScript惰性函数   

function createXHR(){
	var xhr = null;
	try{
		//FireFox,Opera 8.0+,Safari,IE7+
		xhr = new XMLHttpRequest();
	}catch(e){
		//Internet Explorer
		try{
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				xhr = new ActiveXObject("MicroSoft.XMLHTTP");
			}catch(e){
				xhr = null;
			}
		}
	}
	return xhr;
}

//function handleErr(err){
//	var errXHR = err;
//
//}
/*惰性函数*/
//第二次生效
function createXHR(){
	var xhr = null;
	if(typeof XMLHttpRequest != ‘undefined‘){
		xhr = new XMLHttpRequest();
		createXHR = function(){
			return new XMLHttpRequest();
		}
	}else{
		try{
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
			createXHR = function(){
				return new ActiveXObject("Msxml2.XMLHTTP");
			}
		}catch(e){
			try{
				xhr = new ActiveXObject("MicroSoft.XMLHTTP");
				createXHR = function(){
				return new ActiveXObject("MicroSoft.XMLHTTP");
			}
			}catch(e){
				createXHR() = function(){
					return null;
				}
			}
		}
	}
	return xhr;
}

二、函数科里化

function curry(fn){
	var args = Array.prototype.slice.call(arguments,1);
	return function(){
		var innerArgs = Array.prototype.slice.call(arguments);
		var finalArgs = args.concat(innerArgs);
		console.log(finalArgs);
		return fn.apply(this,finalArgs);
	}
}
function add(num1,num2,num3){
	return num1+num2+num3;
}
var t = curry(add,50)(1,2);
alert(t);

三、级联函数

function classA(){
	this.face = "";
	this.mouse = "";
	this.leg = "";
}

classA.prototype = {
	setFace: function(){
		this.face = "红扑扑";
	}
	setMouse: function(){
		this.mouse = "大嘴";
	}
	setLeg: function(){
		this.leg = "长腿欧巴";
	}
};

var person = new classA();
person.setFace();
person.setMouse();
person.setLeg();
console.log(person);
时间: 2025-01-01 11:23:11

JavaScript高级函数的相关文章

JavaScript高级 函数表达式 《JavaScript高级程序设计(第三版)》

函数表达式的特征 使用函数实现递归 使用闭包定义私有变量 前面我们说到定义函数有两种方式:函数声明.函数表达式. 两者的区别在于函数声明提升,前者在执行之前的上下文环境中直接被赋值,而后者不会. 一.递归 递归函数是一个函数通过名字调用自身的情况下构成的. function factorial(num){ if(num<1){ return 1; }else{ return num * arguments.callee(num-1); } } alert(factorial(10)); 二.闭包

Javascriptg高级函数

Javascript高级函数 惰性载入函数 函数柯里化 级联函数 这并不全面,只是几个主要的. 惰性载入函数 惰性载入表示函数执行的分支只会在函数第一次掉用的时候执行,在第一次调用过程中,该函数会被覆盖为另一个按照合适方式执行的函数,这样任何对原函数的调用就不用再经过执行的分支了. 写一个函数用来创建XmlHttpRequest对象,浏览器兼容性原因,写出的代码通过大量if判断或者try,catch语句将函数引导到正确代码处. 代码示例: function createXHR(){ var xh

JavaScript高级程序设计之函数

函数实际上是对象,每个函数都是Function类型的实例. 函数是引用类型. 函数名实际上是一个指向函数对象的指针,不会与某个函数绑定. // 这种写法更能表达函数的本质 var sum = function(num1, num2) { return num1 + num2; }; var anotherSum = sum; sum = null; console.log(anotherSum(10, 20)); // 30 console.log(sum(10, 20)); // typeer

JavaScript系列:高级函数篇

前言: 本篇主要是介绍 JavaScript使用函数的高级方法,函数是JavaSCript中最有趣的部分,利用Function特性可以编写出很多非常有意思的代码,本篇主要包括:函数回调,高阶函数以及函数柯里化. 1.   函数回调 对于异步编程JavaScript API如SetTimeout或者JQuery的$.ajax又或者越来越火的Node.js编程,在事件循环上都是非阻塞的,意思就是,当你使用异步非阻塞API的使用,调用在回调函数执行之前立即返回,而这些回调在不久之后执行. 1 setT

JavaScript高级程序设计之函数性能

setTimeout 比 setInterval 性能更好 // 取代setInterval setTimeout(function self () { // code goes here setTimeout(self, interval); }, interval); 对异步执行的大数组的分割执行 // 大块.异步数组的处理 function chunk(arr, process, context) { setTimeout(function self() { var item = arr.

我也来谈javascript高级编程之:javascript函数编译过程

前言 题目有点大,其实也就是手痒...跟大家来扯一下javascript编译过程. 那么到底什么是"编译"呢 这个...本人文笔太差,我还是直接举例子吧. 相信玩过js童鞋应该都看过下面这样一个面试题: var a=3; function fn(){ alert(a); function a(){ a=5; } a(); alert(a); } fn(); alert(a); 请问上面的题目执行结果如何呢? 各位童鞋答对了没.没答对?...没关系.别急.下面进一段js科普: 各位童鞋都

一篇文章把你带入到JavaScript中的闭包与高级函数

在JavaScript中,函数是一等公民.JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式. function dada() { var a = 1; var b = function() { console.log(a); } return b // b 就是一个闭包函数,因为它能访问dada函数的作用域 } JavaScript的函数也是对象,可以有属性,可以赋值给一个变量,可以放在数组里作为元素

Javascript高级程序设计——this、闭包、函数表达式

在javascript中函数声明会被提升,而函数表达式不会被提升.当函数执行时,会创建一个执行环境和相应的作用域链,然后利用arguments和其他的命名参数的值来初始化函数的活动对象,作用域链链中所有的外部活动对象都处于第二的位置. function compare(num1, num2){ if(num1 < num2){ retunr -1; } else if(num1 = num2){ retunr 0; } else(num1 > num2){ retunr 1; } } var

《JavaScript高级程序设计》第21-25章

第二十一章 Ajax 与 Comet 1.XMLHttpRequest对象 1)创建XMLHttpRequest对象 function createXHR(){ if (typeof XMLHttpRequest != "undefined"){ return new XMLHttpRequest(); } else if (typeof ActiveXObject != "undefined"){ if (typeof arguments.callee.activ