1.定义
普通函数:
function 函数名(参数){
代码块
return 返回值
}
匿名函数:
function (参数){
代码块
return **
}
匿名函数一般作为立即执行函数
(function (函数名,一般不写)(参数){
代码块
})(参数)
'''立即执行函数,其他写法'''
!function () { /* code */ } ();
~function () { /* code */ } ();
-function () { /* code */ } ();
+function () { /* code */ } ();
void function () { /* code */ } ();
this
1.以方法调用时,this指的是调用方法的那个对象
2.以函数调用时,this永远指window
3.以实例调用时,this指的是改实例
var name = '小白'
function fun(){
alert(this.name)
}
var obj1={name:'小明',myfun:fun}
var obj2={name:'小花',myfun:fun}
fun()
obj1.myfun() >>>小明
obj2.myfun() >>>小花
作用域
1.定义:函数外部定义的为全局,函数内部定义的为局部
2.补充:全局变量都是window对象的属性,全局函数都是window对象的方法
3.特点:
1.在函数中使用变量,会先在当前作用域里查找,如果没有再往上一级找
2.在函数中如果想直接使用全局变量,不用var直接使用即可,或window.变量
3.在函数中如果不使用 var 定义变量,那么它就是全局变量,相当于window.变量
变量提升
1.js会先加载function,所以func的位置为在哪调用无关
2.js会先加载var(变量),但不会对其进行赋值操作,将function赋值也是这样
工厂模式
function creat_person(name,age){
var obj = new Object;
obj.name=name
obj.age=age
obj.alertName=function(){
alert(this.name)
}
return obj
}
var one =creat_person('张三',10)
var two =creat_person('李四',10)
one.alertName() //张三
two.alertName() //李四
call()与apply()
在调用call()与apply()时可以将一个对象指定为第一个参数
此时这个对象会成为函数的this
function func(){
alert(this.name)
}
obj1={name:'obj1'}
obj2={name:'obj2'}
func.call(obj1) >>>obj1
func.apply(obj2) >>> obj2
function func2(a,b){
this.a=a
this.b=b
alert(a)
alert(b)
}
obj1={name:'obj1'}
obj2={name:'obj2'}
apply要把参数放进一个数组
func2.apply(obj1,[2,3])
call在对象后依次传递
func2.call(obj1,2,3)
arguments属性
在调用函数时,会传递两个隐含属性,一个是this,一个是arguments
function func(){
不管func有无定义形参,通过arguments都可以拿到实参
console.log(arguments.length) >>>参数的长度
console.log(arguments[0]) >>>第一个参数
...
console.log(arguments[arguments.length-1]) >>>最后一个参数
}
func(1,2)