1.函数
1.函数定义
专门用于封装代码,是一段可以随时被反复执行的代码块
2.函数格式:
function 函数名称(形参列表)){
被封装的代码
}
3.函数注意点:
1.一个函数可以有形参也可以没有形参
2.一个函数可以有返回值也可以没有返回值
3.return的作用和break相似,所以return后不能编写任何语句(执行不到)
break作用:立即结束switch语句或者循环语句
return作用:立即结束当前所在函数
2.arguments
1.arguments概念
该参数是一个包含函数传入参数的类数组
2.arguments作用
保存所有传递给函数的实参
3.注意点
为什么说arguments是类数组的对象, 因为他具有数组一样的访问性质及方式, 可以通过arguments[n]来访问对应的单个参数的值, 并拥有数组长度属性length.并且arguments对象存储的是实际传给函数的参数,不局限于函数声明时所定义的形参.不能显式创建arguments对象,arguments对象只有函数开始时才能用.
4.实例1:打印arguments
function getQiu(){
// 注:每个函数都有一个叫做arguments的东西
console.log(arguments);
// arguments其实是一个伪数组
console.log(arguments[0]);
console.log(arguments[1]);
console.log(arguments[2]);
}
getQiu(10,20,30)
/*
Arguments(3) [10, 20, 30, callee: ƒ, Symbol(Symbol.iterator): ƒ]
0: 10
1: 20
2: 30
callee: ƒ getQiu()
length: 3
Symbol(Symbol.iterator): ƒ values()
__proto__: Object
10
20
30
*/
5.实例2:遍历参数并求和
// 实例:遍历参数并求和
function Qiu(){
var sum=0
for (let i = 0; i < arguments.length; i++) {
sum+=arguments[i]
}
console.log(sum);
}
Qiu(1,2,3)
// 6
2.1 callee
2.1.1 发现callee
//我们知道,arguments是一个包含传入函数中的参数的类数组
function Qiu() {
console.log(arguments);
}
Qiu(1,2,3)
/*
Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
0: 1
1: 2
2: 3
callee: ƒ Qiu() //发现arguments的属性callee
length: 3
Symbol(Symbol.iterator): ƒ values()
__proto__: Object
*/
2.1.2 探索callee
callee是arguments对象的属性
arguments.callee指向参数所属的当前执行的函数. 就是说callee返回正在被执行的function对象, 也就是所指定的function对象的正文.
callee属性的初始值就是正被执行的 Function 对象.
callee表示对函数对象本身的引用,这有利于匿名函数的递归或者保证函数的封装性
callee拥有length属性,这个属性可用于验证。arguments.length是实参长度,arguments.callee.length是形参长度,可以判断调用时形参长度是否和实参长度一致。
2.1.3 实例:
function Qiuqiu() {
console.log(arguments.callee)
}
Qiuqiu()
/*
ƒ Qiuqiu() {
console.log(arguments.callee)
}
*/
2.2 caller
2.2.1 概念
caller是function的属性
callee是arguments的属性
caller: 调用者,调用当前的函数.(代表当前函数在那个函数中调用的)
callee: 被调用者,也就是正在执行的函数
2.2.2 实例1:全局调用
function myq() {
if (myq .caller == null) {
console.log ("该函数在全局作用域内被调用!");
} else
console.log ("调用我的是函数是" + myq.caller);
}
myq()//该函数在全局作用域内被调用!
2.2.3 实例2:函数调用
function myq() {
if (myq .caller == null) {
console.log ("该函数在全局作用域内被调用!");
} else
console.log ("调用我的是函数是" + myq.caller);
}
function callQ() {
myq()
}
callQ()
/*
调用我的是函数是function callQ() {
myq()
}
*/
简言之:arguments来保存函数的实参.callee指向当前函数.caller指向调用当前函数的函数