javascript的argument和克隆方法详解

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 !!!

posted @ 2020-10-16 14:33  杰哥之家  阅读(148)  评论(0编辑  收藏  举报