/**
* 1.arr[arr.length] = ‘a’;长度为arr.length,最后一项是arr[arr.length-1]
* 2.arr[arr.length] = ‘b’
* 3.函数声明会提前添加到执行环境,而函数表达式必须等到执行它的时候
* 4.函数内部有两个特殊的对象,arguments包含所有要传入的参数,this
* 5.arguments还有一个属性callee,这个属性是一个指针
* 6.this表示的是执行时所处的作用域
*/
/**
* 1.函数的属性和方法
* 2.每个函数包含两个属性length,prototype
* length:表示希望接收的参数的个数
* 3.每个函数包含两个方法apply,call
* 4.caller属性,该属性指向调用该函数的函数
*/
/**
*
caller :
functionName.caller 返回调用者。
callee:
返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文.
callee是arguments 的一个属性成员,它表示对函数对象本身的引用,这有利于匿名
*/
function caller() {
if (caller.caller) {
alert(caller.caller.toString());
} else {
alert("函数直接执行");
}
}
function handleCaller() {
caller();
}
handleCaller();
caller();
function calleeLengthDemo(arg1, arg2) {
// 返回函数对象本身
alert(arguments.callee.toString());
if (arguments.length == arguments.callee.length) {
window.alert("验证形参和实参长度正确!");
return;
} else {
alert("实参长度:" + arguments.length);
alert("形参长度: " + arguments.callee.length);
}
}
calleeLengthDemo(1);
console.log(typeof new String('1'));