今天看了阮一峰老师的文章后,发现自己理解的function差不少。同时对this也有了一定认识。
首先,直接使用function定义的时候,
var aaaa=function(){ this.temp=100 } console.log(aaaa.temp,temp,window.temp)
这几种都是undefined,typeof(aaaa)是function,此时的temp属性只能在function内部访问,外面是访问不了的。
而使用 new function()
var foo02 = new function() { var temp = 100; this.temp = 200; return temp + this.temp; }
这种方式定义出来的foo02是对象,typeof(foo02)是Object,foo02()也会报错,此时temp就可以访问了,foo02.temp=200,如果想调用,则使用foo02.constructor();
还有两种方法使用new Function()和直接用Function,结果是一样的,使用起来和第一种一样。
关于this的地方,使用with,注意with是不改变作用域的,如果with的对象没有的属性,在with里面使用则会添加到全局作用域中。总之使用with不是特别好,并且对编译器的优化没有好处。
var test1={ a:1, func:function(){ a=123; console.log(this.a); function test2(){ console.log(this.a); } test2(); } }
执行test1.func();结果是1 123;原因是func中的this是绑定的test1,test1.func此时,this指向test1,但是test2()执行的环境是在func中,作用域是func,这里没有定义this.a,所以就向上寻找作用域,到了顶层。而func中定义的a=123没有var声明,所以是全局变量,所以test2中的this.a是全局变量中的a也就是123;再来一种情况:
var a=321; var test1={ a:1, func:function(){ var a=123; console.log(this.a) function test2(){ console.log(this.a) } test2() } }
此时test2()输出的就是321
参考文献
http://javascript.ruanyifeng.com/grammar/object.html
http://www.jb51.net/article/7955.htm
时间: 2024-11-04 10:21:17