这个会打印出:
js中typeof能返回几个值?
string number bool undefined function object
现在来讨论中重点this:
例题1:
var name="222";
var a={
name:"111",
say:function(){
console.log(this.name);
}
}
var fun=a.say;
fun();
//这里因为fun是一个全局变量,然后它保存了a.say的内容
//就是一个function,所以这里的this指向的是windows,
//所以返回222
a.say();
//这个就是简单的返回内部的name 111
var b={
name:"333",
say:function(fun)
{
fun();
}
}
b.say(a.say);
//因为此时传入的是a.say,也就是function,但是它直接执行了fun()
//这样就导致了console.log(this.name) 里面的this指向windows
//所以打印222
b.say=a.say;
//这个其实就是把a.say的方法拷贝到了b.say里面,因为是b调用的say,所以this指向的是b,所以打印内部的333
b.say();
答案是:
例题 2
答案是 234
因为直接调用print()其实是this.print( ),而这里的this是windows,所以调用了foo,而里面的this改变了foo的值为234,
所以打印了234
变一下型:
答案是:111
这里会有预编译,因为this调用foo时就会先从AO(就是print的内部变量区)里面去找,找到了foo,所以this指向的是print
再变一下:
答案是:undefined
因为预编译会先把变量声明提前,然后按照顺序执行,所以在打印之前foo的值是undefined
继续变形:
答案是 123 234
因为new print( )之后就会在print内部产生一个
这个会储存一些值,但是不是储存内部变量,就像print内部定义的var num一样,所以调用this.foo就会调用这个区域内部的变量了
还是要讲一下this定义的值究竟去哪里了 :
function print()
{
var dd=1;
var ss=55;
this.dd=2;
this.aa=11;
console.log(this.dd);
}
new print();
/*
new 了以后就会产生一个
AO{
}
然后定义了var两个变量就会加进去
AD{
dd=1;
ss=55;
}
然后产生了this区域:
AO{
this{
dd=2;
aa=11;
}
dd=1;
ss=55;
}
*/