JS函数
函数声明
- 使用构造函数
var fun = new Function();
- 使用关键字
function 函数名(形参){// 函数体
}
- 匿名函数
var fun1 = function(){name = "fun1"
}
函数参数
实参,形参都可以是任意数据类型,浏览器执行时不会检查实参类型和数量,在函数内部做运算时会做强制类型转换,多的参数会被舍弃,少的会被填充为Underfind
- this:指向函数运行的上下文对象,根据函数被调用的方式不同,this指向的对象也不一样
函数的调用方式 | this指针的指向 |
---|---|
以函数的形式调用 | window |
以方法的形式调用 | 指向调用方法的对象 |
以构造函数的形式调用 | 指向最新创建的对象 |
call()和apply() | 指向指定的对象 |
function fun1(){console.log(this);
}// 以函数打方式调用
fun1();// 以方法的形式调用
var obj = {name : "obj",fun : function(){console.log(this);},
}// 以apply或call的方式调用
var obj2 = {name : "obj2"
}obj.fun();fun1.apply(obj2);
- argnment 同this一样,浏览器默认传入的隐藏参数,是保存实参的一个类数组对象,用来分装实参,其中有一个callee属性,对应正在执行的函数对象。
作用域
-
全局作用域
- 在函数外部定义的变量就是全局变量,全局变量会作为浏览器窗口window对象的属性保存
- 在全局作用域创建的函数会作为 window对象 的方法保存
- window对象由浏览器自动创建
- 生命周期:网页打开时创建,关闭时销毁
- 尽量不要在全局作用域定义变量,会污染命名空间
-
函数(局部)作用域
- 在函数内部定义的变量(属性)和函数(方法)只能在函数内部使用,全局无法使用
- 生命周期:函数执行时创建,执行结束时销毁
- 使用 window.变量名 访问全局变量。
- 在函数中,不使用 var 定义的变量会成为全局变量
- 变量的使用遵循就近原则
-
函数的申明提前:使用关键字定义的函数会在整个程序执行之前预先执行,因此可以在函数声明之前调用函数
返回值
使用return返回,无返回值或返回空时(只写一个return
)返回Underfind
- return会结束整个函数
立即执行函数
函数内建方法
call()和apply()
- 调用这两个方法时,函数都会执行
- 可以指定一个对象作为函数的第一个参数(this)这个对象会成为函数的this,用来修改函数的上下文对象
- 如果需要传递参数
- call:需要将所有要传递的参数封装到数组中,也就是call只接受两个参数,第一个是一个对象,第二个是参数数组
- apply:可以直接跟在对象后面传递,不限制参数个数