javascript - with的词法作用域为什么失效了?
本文介绍了javascript - with的词法作用域为什么失效了?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
问题一:
按照老师讲解的,这段代码,的效果应该是
第一个alert bar
第二个alertabc
现实是,我在chrome的console中,直接运行结果是两个bar,是什么原因?
我的代码:
var foo='abc';
with({foo:'bar'}){
function f(){
alert(foo);
}
;(function (){
alert(foo)
})();//第一个alert,它应该弹出 with中的foo
f();//第二个alert,它应该使用全局中的foo
}
老师的代码:
var foo = "abc";
with({
foo: "bar"
}) {
function f() {
alert(foo);
};
(function() {
alert(foo);
})();
f();
}
运行效果:
问题二:with中的foo为什么不能使用= 有没有相关的材料呀?
解决方案
- 除了第一行的
foo="abc"
,其他语句都在with的环境内。 - with()可以跟语句,但是加了
{}
那不是个对象吗。。。。
按照我的理解就是两个都是bar,不是失效了,而是生效了。
这篇关于javascript - with的词法作用域为什么失效了?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文