JavaScript: function内部的两个特殊对象

2017-01-11  本文已影响0人  issac_宝华
function factorial(num){
    return num <=1 ? 1 : num * factorial(num-1); 
}
//当将这个函数指针赋值给另外的变量,清除原来的函数指针,就会表现出他的耦合性
var temp = factorial;factorial = null;
temp();  //出问题
//利用callee解耦
function factorial(num){
    return num <=1 ? 1 : num * arguments.callee(num-1); 
}

PS:在严格模式下是不能调用callee属性(还有caller属性,用于输出谁调用了拥有该caller属性的函数)的:


Paste_Image.png
window.color = "red";
var obj = { color: "blue" };
function sayColor(){
    console.log(this.color);
}
sayColor();    //输出red
obj.sayColor = sayColor;
obj.sayColor();    //输出blue
//这里说函数内的this对象引用的是window对象,要和使用构造函数模式常见对象的函数区别:
function Person(name, age){
  this.name - name;
  this.age = age;
  this.sayName = function(){
    console.log(this);
  }
}
var person1 = new Person('a', 18);
//如果你直接调用Person这个构造函数,this对象引用的还是window对象,但
//是用new操作符新建一个实例,就相当于构造了一个Person对象,因此这个
//时候的this对象引用的是Person对象
person1.sayName();  //打印的是Person对象
Paste_Image.png
上一篇 下一篇

猜你喜欢

热点阅读