`
seavers
  • 浏览: 172347 次
  • 来自: ...
社区版块
存档分类
最新评论

with语句的本质

阅读更多
通过测试及debug后, 得出结论, 仅代表个人意见:

with的本质, 就是构造一个作用域, 将with的对象的所有key, 声明为局部变量



var inner = '123';
var outer = {inner : 'hello world', another: 'hello with'};
window.obj = {outer: outer};

with(outer) {
	alert(inner);
	alert(another);
	alert(outer.inner);
	alert(window.obj.outer.inner);
	show();
}


function show() {
	alert(inner);

}


等同于以下代码


var inner = '123';
var outer = {inner : 'hello world', another: 'hello with'};
window.obj = {outer: outer};

(function(inner, another) {
	alert(inner);
	alert(another);
	alert(outer.inner);
	alert(window.obj.outer.inner);
	show();
})(outer.inner, outer.another);


function show() {
	alert(inner);

}






再看看下面这个常见的问题, 一目了然
var root = { 
    branch: { 
        node: 1 
    } 
}; 

with(root.branch) { 
    root.branch = { 
        node: 0 
    }; 
    // 显示 1, 错误! 
    alert(node); 
} 
// 显示 0, 正确! 
alert(root.branch.node); 



分享到:
评论

相关推荐

    深入理解ECMAScript的几个关键语句

    本文主要探讨了while和for循环、switch语句、for-in语句、with语句以及label语句。 1. while和for循环: while和for是两种基本的循环控制结构。在JavaScript中,两者都能实现重复执行某段代码直到满足特定条件为止...

    neo4j最全面指南以及springboot+java驱动不用编写复杂语句

    - **易于表示连接数据**: 由于其图形数据模型的本质,表示高度连接的数据极为自然。 - **快速检索连接数据**: 对于关联数据的检索和遍历非常迅速。 - **表示半结构化数据**: 半结构化数据的表示也十分便捷。 - **...

    Writing Excel Macros with VBA

    #### 2.1 编程语言的本质 - **解释**:阐述了编程语言的基本原理及其在软件开发中的作用。 - **重点**:理解编程语言的结构和语法规则对于编写高效代码至关重要。 #### 2.2 编程风格 - **概念**:介绍了良好的编程...

    Problems Solving with C++

    这是初学者经常犯的错误,因为这两个运算符在视觉上非常相似,但在逻辑上却有本质的区别。赋值运算符用于给变量赋值,而比较运算符用于比较两个变量的值是否相等。 此外,书中还涉及了控制结构,比如switch语句和...

    javascript对象使用.doc

    本文将深入探讨JavaScript对象的使用,包括对象操作的语句、with语句、this关键字、New运算符以及对象属性和方法的引用。 1. For...in 语句: For...in语句用于遍历对象的所有可枚举属性,而无需预先知道属性的...

    Functional Programming With C# 7.1

    在标题《Functional Programming With C# 7.1》和描述中,我们可以提取到几个关键的知识点。首先,标题提到了“C#函数式编程”,而描述中提及了“C# 7.1”版本,这意味着文档主要聚焦在C#语言的函数式编程特性,并且...

    Building Exploit Chains with Logic Bugs.zip

    它们通常出现在条件语句、循环结构、函数调用以及数据流控制中。例如,一个逻辑漏洞可能允许攻击者绕过安全检查,或者使程序执行非授权的操作。在分析代码时,我们需要特别关注那些可能导致程序行为异常的条件分支。...

    经典励志英语语句中英互译.doc

    8. 变化的本质:"I really wonder why people suddenly change after they get what they wanted." 这句话反映了人们在欲望满足后心态变化的普遍现象,提示我们在人际关系中保持警惕。 9. 情感选择:"Men always ...

    c#本质论,应该有帮助

    值得注意的是,一元正运算符对值没有实质影响,更多是出于语法对称性的考虑。 - **二元运算符**:涉及两个操作数,常见的有算术运算符(如加法 +、减法 -、乘法 *、除法 / 和取模 %)。这些运算符要求对结果进行...

    mysql 导出select语句结果到excel文件遇到问题及解决方法

    这两种方法本质上是等效的,都会将数据写入指定的文件。需要注意的是,文件路径应为绝对路径,且文件扩展名通常设置为`.xls`或`.xlsx`,以便Excel能正确识别。 然而,在实际操作中,可能会遇到一些问题。例如,在...

    DES算法的S盒的设计优化

    2. **直接使用VHDL语句进行行为描述**:适合S盒设计的VHDL语句主要有with-select语句和case语句。使用with-select语句可以直接进行替换的行为描述,无需额外整理;而使用双重case语句嵌套,外层对应S盒的第一位和第...

    playing-with-js:和朋友一起玩js

    3. 控制结构:如条件语句(if...else)、循环(for、while、do...while)、switch语句以及break和continue语句,这些都是编写逻辑流程的关键部分。 4. 函数:JavaScript中的函数是第一类对象,可以作为变量赋值、...

    JavaScript参考chm

    了解V8引擎的工作原理可以帮助开发者写出更快的JavaScript代码,例如避免使用with语句,减少全局变量的使用,以及优化循环结构等。 总的来说,"JavaScript参考chm"涵盖了JavaScript的核心概念、语法、API和最佳实践...

    Secrets of the JavaScript Ninja

    3. 忍者训练(NINJA TRAINING):这部分内容可能是对高级主题的探讨,如运行时代码执行(runtime code evaluation)、使用with语句,开发跨浏览器策略,以及对线程和定时器的控制等。 针对第二部分的内容,我们可以...

    Java数据库接口JDBC入门基础讲座 .rar

    通常使用`try-with-resources`语句块确保资源被正确关闭。 8.事务处理: JDBC支持事务管理,通过`Connection`对象的`setAutoCommit()`方法可以关闭自动提交,然后手动调用`commit()`或`rollback()`来控制事务的...

    最全Java异常处理超详解(建议收藏).pdf

    异常本质上是程序上的错误,包括程序逻辑错误和系统错误。比如使用空的引用、数组下标越界、内存溢出错误等,这些都是意外的情况,背离我们程序本身的意图。 异常分类 Java 所有的异常都是从 Throwable 继承而来的...

    Director 12 Lingo编程从入门到高级 教程大纲.docx

    - **循环语句**:讲解while、repeat with语句以及repeat循环与exitFrame循环的区别。 **第四章、事件、消息与脚本** - **脚本的种类**:区分不同类型的脚本。 - **事件与消息传递**:阐述事件触发后消息的生成、...

    hacking with React

    虽然Props和State都是React组件的核心概念,但它们之间有着本质的区别。Props是只读的输入参数,由外部传入;而State则是组件内部状态的表示形式,可以被组件自身修改。正确区分这两者对于构建复杂的应用程序至关...

    一种MySQL数据库SQL递归查询的研究与实现.pdf

    这些数据库允许在SQL语句中直接对子查询进行递归调用,符合递归的本质。 然而,在MySQL中,由于不支持CTE,实现递归查询需要转换思路。可以通过将递归转换为迭代的方式,即使用循环和条件控制来替代递归。在递归...

Global site tag (gtag.js) - Google Analytics