1 <script > 2 //this知识 3 //*Q:什么是this? 4 //*A:所有函数内部都有一个this,任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window 5 //* 它的值是调用函数的当前对象 6 //*Q:如何确定this的值 7 //*A:test:window 8 // p.test():test 9 // new test():新创建的对象10 // p.call(obj):obj11 12 function Person(color) {13 console.log(this)14 this.color = color;15 this.getColor = function () {16 console.log(this)17 return this.color;18 };19 this.setColor = function (color) {20 console.log(this)21 this.color = color;22 };23 }24 25 Person("red"); //this是谁? window26 27 var p = new Person("yello"); //this是谁? p28 29 p.getColor(); //this是谁? p30 31 var obj = {};32 p.setColor.call(obj, "black"); //this是谁? obj33 34 var test = p.setColor;35 test(); //this是谁? window36 37 function fun1() {38 function fun2() {39 console.log(this);40 }41 42 fun2(); //this是谁? window43 }44 fun1();45 46 //JS关于加分号问题‘47 //js一条语句后面可以不加分号48 //是否加分号是编码风格问题,没有应该或不应该,只有你喜不喜欢49 //但在以下情况下不加分号会出现问题,要求需要在前面加一个分号50 //小括号开头的前一条语句51 //中括号开头的前一条语句52 var a=353 ;(function () {//匿名函数自调用前面如果不加分号会出现错误,所以需要在前面加上一个括号54 55 })()56 57 var b=458 ;[1,2].forEach(function () {//这里在IDE上不会显示红线,但在运行中会出现编译错误,所以这里也要加一个分号,最好是加在一条语句的前面59 60 })61 /*62 编译器的错误理解:var b=4[1,2].forEach(function () {//就会报undefined63 })64 */65 </script>