网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月21日漏签0天
javascript吧 关注:269,140贴子:906,519
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 23回复贴,共1页
<<返回javascript吧
>0< 加载中...

【这个问题有点难】关于with,大神请进。

  • 只看楼主
  • 收藏

  • 回复
  • 韩版花泣
  • var
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
var funcA = new Object();
funcA.url = "http://www.baidu.com/";
funcA.qs = "s?wd=2";
var s2 = function(){
alert( test );
var qs = "s?wd=1";
with(funcA){
var qs = "???";
var test = url + qs;
}
alert( test );
alert( "var qs = " + qs );
return test;
}
alert( s2() );


  • 韩版花泣
  • var
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我知道执行上下文,也知道作用域链,现在在学with的延长作用域链。
现在就是有个小小的问题。
第一个alert会显示undefined我知道,
第二个alert会显示http://www.baidu.com/???,我就有点不明白了,除非with也有一个执行上下文,那我就能明白。但是如果真是那样,第三个alert为什么会是s?wd=1呢?
这题是我自己出的,为了验证with中出现同名的属性会如何处理,
请大神指点。


2026-03-21 12:22:02
广告
不感兴趣
开通SVIP免广告
  • 韩版花泣
  • var
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不要沉啊,有大神吗。


  • 韩版花泣
  • var
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
别沉啊。


  • 喔
  • var
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
with 和 eval估计一样都被遗忘了


  • 夕阳西下Ysky
  • Number
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
with几乎不用 ,主要是延长作用域链。这语法是为了重复代码写的少一点,但是加强了代码复杂性,弊大于利。


  • 韩版花泣
  • var
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 韩版花泣
  • var
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


2026-03-21 12:16:02
广告
不感兴趣
开通SVIP免广告
  • 王小八寻妻
  • var
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看一下变量的作用域,跟with没有关系。


  • 王小八寻妻
  • var
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
那我给你解释的详细一下,首先with中传过来的对象包含两个属性,一个是url另一个是qs。然后with里面又给了一个qs,这个时候从传过来的对象去找这个qs属性,很明显找到了,那么with上一行的那个qs属性值就不发生改变,改变的是传的对象中的qs属性,所以第二个alert弹出来的是你说的那样,又因为那个qs值没有改变,所以第三个弹出来是那样的。你可以把传过来的对象中qs属性取掉再回头理解一下就很清楚了,希望可以帮到你。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 23回复贴,共1页
<<返回javascript吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示