JavaScript严格模式禁用With语句的原因


Posted in Javascript onOctober 20, 2014

看了很多遍JavaScript严格模式,其中有说“禁用With语句”,以前看到这都是骑马观花,一带而过,因为平时就很少用到这个语句,禁不禁用对自己关系都不是很大。今天禁不住想知道为何“严格模式”就容不下with语句呢?

EcmaScript规范上说“with 语句用于设置代码在特定对象中的作用域”,可以看出,With语句改变了作用域链。

function Person(name,age,sex){
this.name = name;
this.age = age;
this.sex = sex;
}
(function(){
var title = '申请人:';
var zhangsan = new Person('张三',20,'男');
var str = '';
with(zhangsan){
str = title+name+',年龄'+age+'岁,'+sex+'性'+',职位'+job;
}
console.log(str);
})();

上面的代码会报Uncaught ReferenceError: job is not defined 。

如果将上面的with语句块改为

str = title+zhangsan.name+',年龄'+zhangsan.age+'岁,'+zhangsan.sex+'性'+',职位'+zhangsan.job;

则不报错,输出str 为:申请人:张三,年龄20岁,男性,职位undefined

对于with语句块中的变量,在执行时,都要在zhangsan中检查是否它的属性。

我们知道运行脚本时,需要两个过程,首先是编译,然后再执行。
很显然在编译的时候,不能确定zhangsan的这变量表示的对象有哪些属性。只能在执行时才能确定zhangsan是Person的一个实例。所以就不能在编译时确实with语句块中的变量是zhangsan的属性还是上一层变量作用域链中的变量。

这与严格模式有编译时就检查变量是否定义冲突,所以严格模式不会允许异已存在,因此严格模式禁用With语句,也就不难理解了。

Javascript 相关文章推荐
javascript 字符 Escape,encodeURI,encodeURIComponent
Jul 09 Javascript
JavaScript中的null和undefined解析
Apr 14 Javascript
Extjs优化(一)删除冗余代码提高运行速度
Apr 15 Javascript
js的正则test,match,exec详细解析
Jan 29 Javascript
jquery实现效果比较好的table选中行颜色
Mar 25 Javascript
js闭包所用的场合以及优缺点分析
Jun 22 Javascript
ReactNative中使用Redux架构总结
Dec 15 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
Jun 29 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
Nov 25 Javascript
RxJS的入门指引和初步应用
Jun 15 Javascript
基于javascript实现移动端轮播图效果
Dec 21 Javascript
ECharts transform数据转换和dataZoom在项目中使用
Dec 24 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
Oct 20 #Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
Oct 20 #Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
Oct 19 #Javascript
js添加select下默认的option的value和text的方法
Oct 19 #Javascript
使用变量动态设置js的属性名
Oct 19 #Javascript
js控制鼠标事件移动及移出效果显示
Oct 19 #Javascript
js读取json的两种常用方法示例介绍
Oct 19 #Javascript
You might like
新手学习PHP的一些基础知识分享
2011/07/27 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
用javascript操作xml
2006/11/04 Javascript
javascript最常用与实用的创建类的代码
2010/08/12 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
JS常用表单验证方法总结
2014/05/22 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
JS中递归函数
2016/06/17 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
从零学习node.js之简易的网络爬虫(四)
2017/02/22 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
Python实现决策树C4.5算法的示例
2018/05/30 Python
pygame游戏之旅 载入小车图片、更新窗口
2018/11/20 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
Python更新所有已安装包的操作
2020/02/13 Python
python数据分析:关键字提取方式
2020/02/24 Python
python自动点赞功能的实现思路
2020/02/26 Python
Python实现GIF图倒放
2020/07/16 Python
基于python模拟TCP3次握手连接及发送数据
2020/11/06 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
护理自荐信
2013/10/22 职场文书
电子商务专业个人的自我评价
2013/11/19 职场文书
25岁生日感言
2014/01/13 职场文书
个人投资计划书
2014/05/01 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
详解Redis复制原理
2021/06/04 Redis