一、函数:
1、 函数定义后直接执行:var f = (function(x){ return x*10}(10));
2、 函数的调用有四种方式: 作为函数;作为方法;作为构造函数;通过call()和apply()方法间接调用;
1、方法调用和函数调用有一个重要区别,即:调用上下文。属性访问表达式有两部分组成:一个对象和属性名称,其中对象成为上下文,函数体可以使用this关键字引用改对象;大多数方法调用使用点符号来访问属性,使用方括号也可以进行属性访问操作,即进行方法的调用;任何函数作为方法调用实际上都会传入一个隐士的实参,即方法调用的母体的对象;
2、Function()构造函数:var f =new Fubction('x','y','return x+y;') === var f = function(x,y){return x+y;}
3、call()和apply()可以看做是某一个对象的方法,通过调用方法的形式来间接调用函数,方法的第一个参数是要调用函数的母对象,形如f.call(o)或f.apply(0);
二者不同的是call()方法传入的第一个参数之后的函数的参数是以单个字符串形式传入,而apply()方法是以多个参数组成的数组传入的;形如f.call(o,1,2) 或 f.apply(o,[1,2]);
3、 函数的实参和形参:当调用函数的时候传入的实参个数超过函数定义时的形参个数时,可以通过标识符arguments的数字下标获取传入实参的参数值; 大多数情况下javascript的默认行为是:省略的实参都将是undefined,多出的参数会自动省略;在严格模式下arguments无法使用;
4、 闭包:函数的执行依赖于变量的作用域,这个作用域是函数定义是决定的,而不是函数调用是决定的;函数对象可以通过作用域链相互关联起来,函数体内部的变量都可以保存在函数作用域内,这种特性在称为'闭包'!
5、 函数式编程:
高阶函数:就是操作函数的函数,它接收一个或多个函数作为参数,并返回一个新函数;
function compose(f,g){
return function(){
return f.call(this,g.apply(this,arguments))
}
}
6、关于Ajax函数请求的url问题:
Ajax请求实际上是对XmlHttpRequest的封装,封装了两步操作,open(),send();
XMlHttpRequest的open()方法有两个参数,一个是HTTP方法或动作:包括get post delete head options put;
第二个参数是URL,他是请求的主体,这是相对于文档的URL,当然也可以指定绝对URL路径,协议、主机和端口必须匹配,不然就是跨域了。
XMlHttpRequest的send()方法的参数分为两种情况:GET请求没有主体,参数可不填或传null,POST请求通常有参数,匹配请求头传递;
HTTP请求的各个部分有指定顺序:请求方法和URL首先到达,然后是请求头,最后是请求主体(数据);通常是调用send()方法才开始启动网络。