在js中使用"with"语句中跨frame的变量引用问题
2007-03-08 00:00
585 查看
在脚本编程时使用with语句,可以大大的缩减使用多级对象引用代码行的长度,这是JScript提供给我们的一个Syntax Sugar。当然不使用with,使用临时变量也可以达到同样的效果。不过创建变量时起名确实不是一件很遐意的事,就连MASM高版本中也提供了一个@@(以及@F和@B)来处理临时标号的问题,看来大家都是比较懒得啦。
我也挺喜欢用with语句的,确实可以省不少的事情,而且可以让代码变得也清晰些,特别是在处理跨frame的变量引用时,更加显得方便。这不今天就因为贪图方便又撞到枪口上了,在with中去取跨frame的变量时,遇到一个莫名其妙的bug郁闷了半天。
我写的代码其实不复杂,就是在一个with中,作了很多另一个frame中的变量引用和计算操作后,把结果赋值到本页面函数的一个局部变量里。事例代码大概如下: // ...
var hierarchies = [];
with(parent.frames['xxxFrame'])
{
// 引用xxxFrame里的变量和值产生我要的东西
hierarchies.push(xxx);
}
// 开始使用hierarchies
这时hierarchies比较发疯,不管怎么弄里面的值老是和想要得值有却别,但又不是完全不对(后面会说为什么会这样,同时这是也严重迷惑我debug的一个地方,被害惨了)。
为什么会这样?最后查出来原来是xxxFrame里也有一个叫hierarchies的变量,而且也是数组,放的内容居然也和我放的差不多,所以我前面说了为什么会被迷惑了吧。而且还不止这点,由于之前还写了一个这种类似的with来跨页面取数据,而且工作的很好,所以潜意识就觉得,with里的那个hierarchies就是with外的那个hierarchies。我也不记得xxxFrame中那个变量是不是我自己定义的了,反正debug时被郁闷了好一阵子:(。
JScript手册说with(objects) statements的作用是:为语句设定默认对象。不过在with内部对变量的作用范围,它有个搜索规则,就是优先做默认对象(objects)中的匹配。虽然有时觉得默认对象的作用域更"远",就像跨frame这种情况。当默认对象引用中不能匹配,就匹配with之前被声明过的变量。都不能匹配到就是undefined了。
本文只能老实收入"debug中的滑铁卢"中了。
我也挺喜欢用with语句的,确实可以省不少的事情,而且可以让代码变得也清晰些,特别是在处理跨frame的变量引用时,更加显得方便。这不今天就因为贪图方便又撞到枪口上了,在with中去取跨frame的变量时,遇到一个莫名其妙的bug郁闷了半天。
我写的代码其实不复杂,就是在一个with中,作了很多另一个frame中的变量引用和计算操作后,把结果赋值到本页面函数的一个局部变量里。事例代码大概如下: // ...
var hierarchies = [];
with(parent.frames['xxxFrame'])
{
// 引用xxxFrame里的变量和值产生我要的东西
hierarchies.push(xxx);
}
// 开始使用hierarchies
这时hierarchies比较发疯,不管怎么弄里面的值老是和想要得值有却别,但又不是完全不对(后面会说为什么会这样,同时这是也严重迷惑我debug的一个地方,被害惨了)。
为什么会这样?最后查出来原来是xxxFrame里也有一个叫hierarchies的变量,而且也是数组,放的内容居然也和我放的差不多,所以我前面说了为什么会被迷惑了吧。而且还不止这点,由于之前还写了一个这种类似的with来跨页面取数据,而且工作的很好,所以潜意识就觉得,with里的那个hierarchies就是with外的那个hierarchies。我也不记得xxxFrame中那个变量是不是我自己定义的了,反正debug时被郁闷了好一阵子:(。
JScript手册说with(objects) statements的作用是:为语句设定默认对象。不过在with内部对变量的作用范围,它有个搜索规则,就是优先做默认对象(objects)中的匹配。虽然有时觉得默认对象的作用域更"远",就像跨frame这种情况。当默认对象引用中不能匹配,就匹配with之前被声明过的变量。都不能匹配到就是undefined了。
本文只能老实收入"debug中的滑铁卢"中了。
您可能感兴趣的文章:
- JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
- 深入浅析JavaScript中with语句的理解
- 理解javascript中的with关键字
- javaScript中with函数用法实例分析
- Javascript中With语句用法实例
- JavaScript严格模式禁用With语句的原因
- javascript中with()方法的语法格式及使用
- JavaScript的strict模式与with关键字介绍
- javascript简单事件处理和with用法介绍
- js批量设置样式的三种方法不推荐使用with
- 关于JavaScript的with 语句的使用方法
- javascript下with 的简化代码写法
- js的with语句使用方法
- javascript之with的使用(阿里云、淘宝使用代码分析)
相关文章推荐
- 在with语句中跨frame的变量引用问题
- PHP的foreach语句使用引用变量的问题
- 尚未备份数据库 "TEST" 的日志尾部。如果该日志包含您不希望丢失的工作,请使用 BACKUP LOG WITH NORECOVERY 备份该日志。请使用 RESTORE 语句的 WITH REPL
- 生成圆角,使用curvycorners.js出现错误"No object with ID #calpopup exists yet"的解决
- delphi中使用sql语句加条件引用时值是一个整型变量的问题
- UIWebView使用[ JSValue callWithArguments:] UI 卡死问题
- 【Java基础】在使用@Deprecated注解时发生的对象引用变量的类型的问题
- Web Api 图片上传,在使用 Task.ContinueWith 变量无法赋值问题
- C++11 range for 遍历多维数组, 迭代变量添加引用 "&"的问题
- switch语句中在case块里声明变量会遇到提示“Expected expression before..."的问题
- AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
- 细谈 Web Api 图片上传,在使用 Task.ContinueWith 变量无法赋值问题的解决办法!
- Access里的变量使用与Sql语句里变量对应问题
- CLR中函数引用传递无法使用ref class成员变量的问题
- js的with语句使用方法
- switch语句中在case块里声明变量会遇到提示“Expected expression before..."的问题
- 关于解决JavaScript中使用require引用外部js时出现的某个对象 not defined 时现时消失 问题
- js的with语句使用方法
- JS闭包中未使用的引用变量回收机制浅探