javascript的with语句面试题

作者:norion时间:2013年6月10日评论次数:0 条

坑爹的with,貌似很多大神都建议不要用它,因为它会增加with 语句以外的数据的访问代价。但是说归说,遇到了就算给你自己增加知识点,现在给大家弄一道群的同学提供的with语句面试题:

({
	x : 10,
	foo : function () {
		function bar() {
			console.log(x);
			console.log(y);
			console.log(this.x);
		}
		with (this) {
			var x = 20;
			var y = 30;
			bar.call(this);
		}
	}
}).foo();

请问上面这段代码输入了什么?答案是:

undefined
30
20

你对了吗?其中 ({}).foo() 这样执行的时候,this 指向的是那个 {} 对象,所以如果我们去输入this时会输出:

Object {x: 10, foo: function}

进入到 with 里面的时候,var x = 20; 查找的时候,会发现 this.x 是存在的,所以忽略了那个 var。直接把 this.x 赋值为 20了,var y = 30; 由于 this 没有 y 属性,所以就声明了一个变量y,在 with 的闭包里面。然后执行 bar 的时候,先找 x,由于 x 之前没声明过,所以,x 就是 undefined,最后 this.x ,这个就是 20 了

标签:

上一篇: ie下img最好别出现src为空的情况

下一篇:给input的placeholder设置颜色

相关文章

评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注