诡异代码-JS-1
来源:互联网 发布:mac奶瓶粉底液 编辑:程序博客网 时间:2024/06/06 08:38
出处: 你不知道的JavaScript(上卷)- 19
function foo(obj) { with (obj) { a = 2; }}var o1 = { a: 3};var o2 = { b: 3};foo( o1 );console.log( o1.a ); // 2foo( o2 );console.log( o2.a ); // undefinedconsole.log( a ); // 2——不好, a 被泄漏到全局作用域上了!
说明:
1. 在执行 foo(o2) 时,foo函数内部对a执行的是LHS(左值查找),在给定的(即with的)o2中没有找到a字段时,将在全局作用域中查找,如果没有则会在全局作用域中创建a变量,而不会在o2对象中创建它
2. with可以将一个对象处理成一个作用域, 对象的属性即为这个作用域中的标识符
3. 提醒:如果在with代码块中使用var声明一个变量,这个变量不会成为with对象的属性,而是声明在了with语句所在的作用域中, 而let声明则既不会成员对象的成员,也不会被声明在with语句所在的作用域中, let声明只会在with临时创建的作用域中(在node中测试过)
4. eval函数也会创建一个作用域,尝试:
eval(“let a = 1”)
console.log(a)
结果是出错,变量a没有定义
5. 在严格模式下 “use strict”, with 被禁止使用,eval 不能创建全局变量
0 0
- 诡异代码-JS-1
- 诡异代码-js-2
- 诡异的代码,郁闷~~~
- Python 的诡异代码
- 诡异的java代码
- JAVA诡异的代码
- 好玩,诡异,代码大全
- java 诡异的代码
- 诡异的JS数组长度
- 代码移植中的诡异bug
- 一段很诡异的代码
- 诡异
- 诡异
- 诡异
- "Uncaught object angular.js:36"诡异错误
- 谈谈js诡异的面向对象设计
- Js中诡异的Array.length
- js的事件方法感觉比较诡异
- (蓝桥杯练习)3.排列序数(康托展开)
- 算法导论 练习题 6.1-1
- 十点多
- HBase详细概述
- JS正则表达式验证前台数据
- 诡异代码-JS-1
- 【Unity】DoTween插件的使用
- NDk在As的流程
- 目前几种图片格式
- 一站式学习Wireshark(十):应用Wireshark显示过滤器分析特定数据流(下)
- 优先队列
- 求职有用博客地址
- Atitit 数据库 标准库 sdk 函数库 编程语言 mysql oracle attilax总结
- 一种高效率的笔记法——康奈尔笔记法