// callee
function foo(a){
console.log(a)
if(a === 'again'){
arguments.callee('again end')
console.log(arguments.callee)
console.log(foo)
// 这里返回true,说明arguments.callee是指向foo函数的引用,所以完全一致。
console.log(arguments.callee === foo)
}
}
foo('again')
// caller
let obj = {
f: function bar(){
// 这里输出 null,应该是表示window对象的调用。
console.log('obj.f()', bar.caller)
// 这里输出undefined,所以这么看argument.caller的属性已经删除掉了
console.log('obj.f()', arguments.caller)
},
}
obj.f(1)
// 在函数中调用能够拿到调用者,全局状态下为 null
// http://www.jiazhengblog.com/blog/2009/12/27/48/
function a(){
// 函数名.caller 能够拿到调用者
console.log(a.caller);
// 或者通过arguments.callee获取函数本身,在取得caller属性也能够拿到调用者
console.log(arguments.callee.caller);
}
function b(){
a(1);
}
b();
// arguments[@@iterator]
function bar(){
console.log(arguments[Symbol.iterator])
console.log(arguments[Symbol.iterator]())
for(let item of arguments) {
console.log('for of', item)
}
// 从最终的效果来看,for of arguments 和 for of arguments[Symbol.iterator]() 最终效果一致
// for of能够自动转换迭代器
for(let item of arguments[Symbol.iterator]()) {
console.log('for of', item)
}
}
bar(1,2,3,4)
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.