JavaScript中的with语句
执行环境的类型有两种:全局执行环境和局部执行环境(函数执行环境)。
1.全局执行环境的变量对象是window对象,是JS代码开始运行时的默认环境。全局执行环境的变量对象始终都是作用域链中的最后一个对象。但是还是有其他办法来延长作用域链。
2.函数执行环境,当某个函数被调用的时候,会先创建一个执行环境及其相应的作用域链,然后使用arguments对象和其他命名参数的值来初始化执行环境的变量对象。
有些语句可以在作用域前端临时增加一个变量对象,该变量对象会在代码执行之后被移除。
两种情况
1.with语句
2.try-catch语句的catch块
当执行流进入上面的任何一个语句时,作用域链就会被加长。
with语句
1.with语句的作用是将代码的作用域设置到一个特定的对象中。目的主要是为了简化多次编写同一个对象的工作。
2.使用with语句可以关联location对象,也就是说,在with语句的代码块内部,每个变量首先会被认为是一个局部变量,而如果在局部环境中找不到该变量的定义,则会查询location对象中是否有同名的属性。如果发现了同名的属性,则以location对象属性的值作为变量的值。
3.严格模式下不允许使用with语句,否则将视为语法错误。
4.with关键字的弊端
- 性能问题
使用with关键字后,js引擎不能对这段代码进行优化,,还有就是js压缩工具不能对这段代码进行压缩,这也是影响的一个因素 - 语义不明,难以调试
具体可以参考http://luopq.com/2016/02/14/js-with-keyword
5.对with语句来说,会将指定的对象添加到作用域中。
如:
function bulidUrl(){
var qs = "?debug=true";
with(location){//with语句接收的是location对象,因此with语句的变量对象中就包含了location对象的所有属性和方法,然后这个变量对象被添加到作用域的前端。
var url = href + qs;
}
return url;
//当执行流进入buildUrl函数时,它的执行环境中的活动对象就包括arguments对象,with语句中的location对象,qs,url,所以在with语句中定义的url变量可以在with语句外被访问。
}
我的理解:如果你想引用某个指定对象的方法和属性,可以用with语句。这样,这个指定对象就被添加到作用域链的前端。在with语句块中定义的url变量,可以在buildUrl函数作用域中被访问,with语句块只是一个特例(它也有变量对象,即location,当在内部引用href的时候,是因为可以在当前执行环境的变量对象中找到)
注意
IE8及其之前版本的try-catch语句块中,在catch块外面也可以访问到错误对象,因为在catch语句中捕获的错误对象会被添加到执行环境的变量对象,而不是catch语句的变量对象中。IE9修复了这个问题。
JavaScript中的with语句的更多相关文章
- JavaScript中:表达式和语句的区别
JavaScript中:表达式和语句的区别 Javascript语言精粹:表达式是由运算符构成,并运算产生结果的语法结构.程序是由语句构成,语句则是由“:(分号)”分隔的句子或命令.如果在表达式后面加 ...
- JavaScript 中表达式和语句的区别
1.语句和表达式 JavaScript中的表达式和语句是有区别的.一个表达式会产生一个值,它可以放在任何需要一个值的地方,比如,作为一个函数调用的参数.下面的每行代码都是一个表达式: myvar3 + ...
- Javascript中的Label语句
在javascript中,我们可能很少会去用到 Label 语句,但是熟练的应用 Label 语句,尤其是在嵌套循环中熟练应用 break, continue 与 Label 可以精确的返回到你想要的 ...
- 理解javascript中的for语句
程序实现中经常要用到循环语句,其中for循环是多数语言都有的.在javascript中,for循环有几种不同的使用情况,下面就分别来讲述我的理解. 第一种:(通常情况,循环执行相关操作) var ob ...
- Javascript中表达式和语句的区别
一.表达式:一个表达式会产生一个值,它可以放在任何需要一个值的地方,比如,作为一个函数调用的参数. 以下例子就是表达式: a=35: b=1+a; a=function (){return 6}: b ...
- [译]Javascript中的switch语句
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- JavaScript中的label语句,及应用
label语句:可以在代码中添加标签,以便将来使用. 语法:label : statement 示例: start: for(var i=0;i<10;i++){ console.log(i); ...
- [译]javascript中的条件语句
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- 浅谈Javascript中的Label语句
如: begin: for (var i = 0; i < 10 ; i++ ){ alert(i); } 举一个比较典型的例子,看完后即明白 Label 的应用:(未添加 Label) var ...
随机推荐
- Linux-进程间通信(五): 网络套接字
不想说话,坑太深:持续学习网络编程中...
- go语言爬虫goquery和grequests的使用
/*下载工具*/ package main import ( "fmt" //go语言版本的jquery "github.com/PuerkitoBio/goquery& ...
- python 使用headless chrome滚动截图
from selenium import webdriver from selenium.webdriver.chrome.options import Options import util chr ...
- 经典卷积网络模型 — LeNet模型笔记
LeNet-5包含于输入层在内的8层深度卷积神经网络.其中卷积层可以使得原信号特征增强,并且降低噪音.而池化层利用图像相关性原理,对图像进行子采样,可以减少参数个数,减少模型的过拟合程度,同时也可以保 ...
- django中使用第三方包实现定时任务
# 转载请留言联系 在做主页静态化的时候,需要定时生成主页HTML,以保持数据的最新. 定时任务可以用第三方包django-crontab来实现. 附上官方文档:https://pypi.org/pr ...
- 取消div,a等标签点击效果
当标签被设置onclick事件之后,在有些手机浏览器中,点击这些标签,会有点击变色效果.想要取消点击变色效果. 添加:div{-webkit-tap-highlight-color:rgba(0,0, ...
- Mybatis学习—XML映射文件
总结自 Mybatis官方中文文档 Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同 ...
- 五:ZooKeeper的集群命令客户端的链接和命令操作的使用
一:zookeeper客户端链接[1]进入zookeeper的安装目录的bin目录下 # cd /opt/zookeeper/bin[2]敲击链接客户端的命令(zkCli.sh) ...
- 我感觉prometheus这种日志收集模式不错
思想可以,可推可拉,可自己写接入点...还有报警... 按官方文档试一下安装 https://prometheus.io/docs/introduction/getting_started/
- hdu5740
考验代码能力的题目,感觉网络流一要求输出方案我就写的丑 http://www.cnblogs.com/duoxiao/p/5777632.html 官方题解写的很详细 因为如果一个点染色确定后,整个图 ...