arguments.callee
function test() { console.log(arguments.callee) //指向函数引用 test } test()
看以下例子
var num = (function(n) { if (n == 1) return 1 return n * arguments.callee(n - 1) }(6)) console.log(num) //对于立即执行函数,可以通过argements.callee拿到其函数引用
看以下例子
function test() { console.log(arguments.callee) // test function demo() { console.log(arguments.callee) // demo } demo()
} test()
func.caller
function test() { demo() } function demo() { console.log(demo.caller) //test 谁调用了,调用的那个函数 } test() //在es5标准模式下不能使用
克隆
克隆有浅克隆和深克隆区分
看一下例子
//浅克隆 var obj = { name: 'lyj', age: 123, sex: '男' } function clone(origin, target) { var target = target || {} for(var prop in origin) { target[prop] = origin[prop] } return target } var obj1 = clone(obj)
//深度克隆 var obj = { name: 'lyj', age: 123,
sex: '男', card: ['vise', 'mistr'], wife: { name: 'abc', son: { name: 'def' } } } var obj1 = {
} function deepClone(origin, target) { var target = target || {}, toStr = Object.prototype.toString, arrStr = '[object Array]' for(var prop in origin) { if(origin.hasOwnProperty(prop)) { if(origin[prop] !== 'null' && typeof(origin[prop]) == 'object') { target[prop] = toStr.call(origin[prop]) == arrStr ? [] : {} deepClone(origin[prop], target[prop]) } else { target[prop] = origin[prop] } } } return target } deepClone(obj, obj1)
end !!!